reduce方法好像平时很少用到它,但其实如果你真正的了解了它的话,我们可以在很多场景用到它,例如求数组元素的出现次数,求和,求乘积等等。。下面我来带大家去认识下它吧。
引用MDN文档里对reduce的语法介绍:arr.reduce(callback(accumulator, currentValue[, index[, array]])[, initialValue])
参数一:callback()回调函数,回调函数里有4个参数。
accumulator:它是上一次调用回调时返回的累积值(第一次也有可能是initialValue)。
currentValue:数组中正在处理的元素。
index:数组中正在处理的当前元素的索引。 如果提供了initialValue
,则起始索引号为0,否则从索引1起始。
array:调用reduce()
的数组本身
参数二:initialValue:作为第一次调用 callback
函数时的第一个参数的值。 如果没有提供初始值,则将使用数组中的第一个元素。 注意在没有初始值的空数组上调用 reduce 将报错。
参数繁多,是不是有点看不过来了?来点实例帮助掌握下。
var arr = [1, 2, 3, 4]; var sum = arr.reduce((x,y)=>x+y,0)//加初始值,以防数组为空时报错 var mul = arr.reduce((x,y)=>x*y,1)
a.数组统计元素出现个数
var arr=[‘a‘,‘b‘,‘c‘,‘a‘]; arr.reduce((prev,curr)=>{ if(curr in prev){//判断当前元素是否出现过 prev[curr]++; }else{ prev[curr]=1; } return prev },{})
b.把二维数组转化为一维数组
let arr = [[0, 1], [2, 3], [4, 5]] let newArr = arr.reduce((pre,cur)=>{ return pre.concat(cur) },[])
c.数组去重
var arr=[‘a‘,‘b‘,‘c‘,‘a‘]; arr.reduce((pre,cur)=>{ if(!pre.includes(cur)){ console.log(pre.concat(cur)) return pre.concat(cur) }else{ return pre } },[])
更多用法。。。待续
原文:https://www.cnblogs.com/zjzpg/p/13993197.html