reduce用的比较少,如果数组里面全部是数字,操作起来可能没有什么问题,如果里面是对象的话,可能坑还是表较多。
let arr=[1,3,4,5];
let total=arr.reduce((item1,item2)=>item1+item2);
console.log(total);//13
reduce其实有两个参数,第一个是一个函数,用来处理遍历数组,第二个是一个起始值。如果第二个参数不传递的话,默认会把数组的第一个传递进去作为处理函数的第一个参数,也就是上面例子的item1,函数的返回值作为一个新的item1,传递进入处理函数。
let arr=[{name:"语文",value:99},{name:"数学",value:98},{name:"英语",value:60}];
let total=arr.reduce((item1,item2)=>{return {value:item1.value+item2.value}});
console.log(total);//{value: 257}
注意处理函数中的返回值,返回的是一个对象,对象带着一个value,这样返回值下次传递进入到函数取value与后面的value拼接,最后返回一个{value:257}的对象
用法:
let arr=[1,3,5,100,50];
let result=arr.reduce((item1,item2)=>Math.max(item1,item2));
console.log(result);//100
还有一个是reduceRight,跟reduce一样的用法,不过他不是从数组第一个遍历,而是从数组尾部开始。