reduce
array.reduce(function(total, currentValue, currentIndex, arr), initialValue)
- total 初始值
- currentValue 调用方法的当前元素
- currentIndex 调用方法的当前元素索引(可选
- arr 当前元素所属的数组对象。
- initialValue 传递给函数的初始值 也就是 total 的值
查出每个数出现的次数
/*
判断对象是否是数组/对象的元素/属性
当list是数组时:’变量‘指的是‘索引’
当list为对象时:’变量’指的是‘属性名‘
*/
let list = [11, 11, 11, 22, 33, 44, 55, 99, 99, 99];
let sum = list.reduce((pre, cur) => {
if(cur in pre){
pre[cur] ++
}else{
pre[cur] =1
}
return pre;
}, {}); pre默认值设置为{}
去重
let list = [11, 11, 11, 22, 33, 44, 55, 99, 99, 99];
let sum = list.reduce((pre, cur) => {
if(!pre.includes(cur)){
return pre.concat(cur); 不会改变原属数组
}else{
return pre;
}
}, []);
数组扁平化
1.list.flat(Infinity);
2.reduce
二维数组变一维
let list = [[11,22],[33,44],[55,66]];
let sum = list.reduce((pre, cur) => {
return pre.concat(cur);
}, []);
多维数组变一维
let list = [[88, [5, 6, 7], [5, 6, 88, [123]]]];
let sum = function (list) {
return list.reduce((pre, cur) => pre.concat(Array.isArray(cur) ? sum(cur) : cur), []);
}
对象里的属性求和
let json = [
{
name:'json1',
number:10
},
{
name:'json2',
number:20
},
]
let sum = json.reduce((pre, cur) =>{
return pre += cur.number
},0)
数组中重复的数
var list = [1,2,1,2,3];
var newlist = [];
list.sort().sort((x,y)=>{
x === y ? newlist.push(y) : ''
})
newlist // [3]