1、语法
arr.reduce(function(prev,cur,index,arr){ ... }, init);
arr 表示原数组;
prev 表示上一次调用回调时的返回值,或者初始值 init;
cur 表示当前正在处理的数组元素;
index 表示当前正在处理的数组元素的索引,若提供 init 值,则索引为0,否则索引为1;
init 表示初始值,若没有提供init值,初始时prev为数组第一项,cur为第二项。
2、常用情形
(1)数组求和
<script type="text/javascript"> const arr = [1,2,3,4]; const sum1 = arr.reduce((pre, cur)=>{ return pre + cur; }) console.log(sum1); // 10=1+2+3+4 const sum2 = arr.reduce((pre, cur)=>{ return pre + cur; }, 1) console.log(sum2); // 11=1+1+2+3+4 </script>
(2)计算数组中最大值
var arr = [3,9,4,3,6,0,9]; var max = arr.reduce(function (prev, cur) { return Math.max(prev,cur); });
(3)计算数组中每个元素出现的次数
<script type="text/javascript"> const arr = ['a','b','a','c','b','a','c']; const count = arr.reduce((pre, cur)=>{ if(cur in pre) { pre[cur]++; } else { pre[cur] = 1; } return pre },{}) console.log(count); // {a: 3, b: 2, c: 2} </script>
(4)数组去重
<script type="text/javascript">
const arr = ['a','b','a','c','b','a','c'];
const newArr = arr.reduce((pre, cur)=>{
if (!pre.includes(cur)) {
return pre.concat(cur)
} else {
return pre
}
},[])
console.log(newArr); // ["a", "b", "c"]
</script>
(5)数组扁平化
<script type="text/javascript"> const arr = [1,[2,3,4,[5,6,7]],8]; const newArr = (arr) => { return arr.reduce((pre, cur)=>{ return pre.concat(Array.isArray(cur) ? newArr(cur) : cur) },[]) } console.log(newArr(arr)); // [1, 2, 3, 4, 5, 6, 7, 8] </script>