重点总结:
reduce() 是数组的归并方法,与forEach()、map()、filter()等迭代方法一样都会对数组每一项进行遍历,但是reduce() 可同时将前面数组项遍历产生的结果与当前遍历项进行运算,这一点是其他迭代方法无法企及的
arr.reduce(function(prev,cur,index,arr){
arr表示原数组
prev表示上一次调用回调时的返回值,初始值init
cur表示当前正在处理的数组元素
index表示当前正在处理的数组元素的索引
},init)
1.求数组项之和
var arr = [1,2,3,4,5,6];
var sum = arr.reduce(function (prev, cur){
return prev + cur;
},0)
2.求数组项最大值
var max = arr.reduce(function( prev,cur){
return Math.max(prev,cur)
})
3.数组去重
var newArr = arr.reduce(function(prev, cur){
prev.indexOf(cur) === -1 && prev.push(cur)
return prev
},[])
4.求字符串中字母出现的次数
const str = 'sfhjasfjgfasjuwqrqadqeiqsajsdaiwqdaklldflas-cmxzmnha';
const res = str.split('').reduce((accumulator, cur) => {
accumulator[cur] ? accumulator[cur]++ : accumulator[cur] = 1;
return accumulator;
}, {});
5.扁平一个二维数组
var arr = [[1, 2, 8], [3, 4, 9], [5, 6, 10]];
var res = arr.reduce((x, y) => x.concat(y), []);
6.对象数组去重
let person = [
{id: 0, name: "小明"},
{id: 1, name: "小张"},
{id: 2, name: "小李"},
{id: 3, name: "小孙"},
{id: 1, name: "小周"},
{id: 2, name: "小陈"},
];
let obj = {};
let peon = person.reduce((cur,next) => {
obj[next.id] ? "" : obj[next.id] = true && cur.push(next);
return cur;
},[])
console.log(peon);
7.删除两个数组中id相同的对象
let arr = res.data;
let arr1 = res.data1;
arr = arr.filter( item => {
let tableData = arr1.map( v=>v.id)
return !tableData.includes(item.id)
})