天天练习一点点,天天收获一点点!!(算法题收集网络,仅供学习参考)
字符串重复次数
字符串重复次数
var str = 'abcdeacdbe'; //统计字符重复出现的个数;
function findRepeatNum(str) {
return str.split('').reduce((pre,cur) => {
if(cur in pre) {
pre[cur] += 1;
}else{
pre[cur] = 1;
}
return pre;
},{})
}
console.log(findRepeatNum(str)) //{a: 2, b: 2, c: 2, d: 2, e: 2}
过滤对象数组中指定的对象
过滤对象数组中指定的对象
var arr1 = [1,2];
var arr2 = [{id:1,name:"s"},{id:2,name:"ds"},{id:3,name:"gg"}]
//过滤方法
arr3 = arr2.filter((item) => !arr1.includes(item.id)); //[{id:3,name:"gg"}]
数组递归实现过滤指定项
数组递归实现过滤指定项
//测试数据
var data = [{
isextend:1,
vaL:0,
children:[{
isextend:1,
vaL:1,
children:[{
isextend:0,
vaL:4
},{
isextend:1,
vaL:5
}]
},{
isextend:1,
vaL:2,
children:[]
},{
isextend:1,
vaL:3,
children:[]
}]
}]
//过滤方法
function deleteNode(arr, key,targetValue) {
return arr.filter(function(item, i) {
if (item.children) {
item.children = deleteNode(item.children, key,targetValue)
}
return item[key] !== targetValue;
})
}
console.log(deleteNode(data, 'isextend',0))
数组交集补集
数组交集补集
//测试数据(过滤isextend为0的项)
const a = [1, 2, 3, 4];
const b = [2, 3, 5, 6];
//过滤方法
function filterArr(arr1,arr2,type) {
let diffArr = [];
let sameArr = [];
sameArr = arr1.filter(v => {
return arr2.some(a => {
return v == a
})
})
let mergeArr = [...arr1,...arr2];
diffArr = mergeArr.filter(v => {
return !sameArr.includes(v)
})
if (type == 'same') {
return sameArr
} else {
return diffArr
}
}
console.log(filterArr(a,b,'same')) // [2,3]
console.log(filterArr(a,b,'diff')) // [1,4,5,6]
获取当前日期前n天的日期
获取当前日期前n天的日期
function getIntervalDate(days) {
let arrDateKeys = [...Array(days).keys()];
let result = arrDateKeys.map(v => {
let TimeStampOneDay = 24*60*60*1000;
let d = new Date(Date.now() - TimeStampOneDay*v);
let str = `${d.getFullYear()}年${d.getMonth() + 1}月${d.getDate()}日`;
return str
})
return result;
}
console.log(getIntervalDate(3)) // ["2019年6月3日", "2019年6月2日", "2019年6月1日"]
数组最大差值
计算数组中的最大差值
var arr = [1,3,5,7,9,0,11,14,8,6]; //在一个整数数组中,一个数字减去它左边的数字获得一个差值,求最大差值的数字
function findMaxDiffValue(arr) {
var minValue = arr[0];
var MaxDiffValue = 0;
arr.forEach((v,index) => {
if(minValue > v) minValue = v;
var diff = v-minValue;
if(diff > MaxDiffValue) MaxDiffValue = diff;
})
return MaxDiffValue
}
console.log(findMaxDiffValue(arr)) //14
数组重复对象
对数组中重复对象进行操做
//数据样例
var arr = [
{ time: '20190807', cabin: 'w', dcp: 37 },
{ time: '20190806', cabin: 'w', dcp: 37 },
{ time: '20190805', cabin: 'a', dcp: 37 },
{ time: '20190806', cabin: 'w', dcp: 37 },
{ time: '20190807', cabin: 'w', dcp: 37 },
{ time: '20190804', cabin: 'w', dcp: 37 },
{ time: '20190803', cabin: 'w', dcp: 37 },
{ time: '20190805', cabin: 'w', dcp: 37 },
{ time: '20190802', cabin: 'w', dcp: 37 },
{ time: '20190806', cabin: 'j', dcp: 37 },
]
//若是time,cabin相同,那么dcp字段的数值就相加,而且把cabin字段的value取出来变为一个新的字段加入当前对象,值为累加次数;
function filterArr(arr) {
return arr.reduce((pre,cur,index) => {
let {time,cabin,dcp} = cur;
let isHas = pre.findIndex(v => v.time == time && v.cabin == cabin);
if(isHas > -1){
let cur = pre[isHas];
cur['dcp'] += cur['dcp'];
cur[cabin]++;
}else{
let clone = {...cur,[cabin]:1};
pre.push(clone)
}
return pre;
},[])
}