arr.reduce()方法接受一个函数作为累加器,数组中的每个值从左到右开始缩减,最终为一个值。
reduce接受的参数主要有callback(回调函数)和可选参数initvalue(作为第一次调用callback的第一个参数,不传默认数组的第一个元素):
callback回调函数里又接受四个参数分别是:
previousValue(上一次调用回调函数返回的值,或者是提供的初始值(initValue))
currentValue(数组中当前被处理的元素)
index(当前元素在数组中的索引)
array(调用reduce的数组)
简单应用:
1.求和
var total=[0,1,2,3].reduce((acc,cur)=>acc+cur,0) //total 6
2.将二维数组转化为一维
var arr1=[ [0,1], [2,3], [4,5], ].reduce((acc,cur)=>acc.concat(cur),[]) //arr1 [0,1,2,3,4,5]
3.计算数组中每个元素出现的次数
var names=['Alice','Bob','Tiff','Bruce','Alice']; var count=names.reduce(function(allNames,name){ console.log(allNames) if(name in allNames){ allNames[name]++; }else{ allNames[name]=1; } return allNames; },{}) //count is {Alice: 2, Bob: 1, Tiff: 1, Bruce: 1}
4.数组去重
var arr=[1,2,1,2,3,5,4,5,3,4,4,1,6]; let result=arr.sort().reduce((init,current)=>{ if(init.length===0 || init[init.length-1]!==current){ init.push(current); } return init; },[]); //result is [1,2,3,4,5,6]