一、语法
arr.reduce(function(prev,cur,index,arr){
//....
},init);
含义
- arr:表示原数组
- prev:表示上一次调用回调时的返回值,或者初始值init。
- cur:表示当前正在处理的数组元素。
- index:表示正在处理的数组元素的索引,若提供init值,则索引为0,否则索引为1;
- init:表示初始值。
- 常用参数为:prev和cur。
二、实例
- 求数组项之和
var arr = [3,1,2]; var sum = arr.reduce(function (prev,cur) { return prev+cur; },0); alert(sum); //6 var sumString = arr.reduce(function (prev,cur) { return prev+cur; },''); alert(sumString); //'312'
-
求数组项的最大值
var arr = [3,1,2]; var max = arr.reduce(function (prev,cur) { return Math.max(prev,cur); }); alert(max); //3
-
数组去重
var arr = [3,3,4,4,1,3,2,1,2]; var newArr = arr.reduce(function (prev,cur) { prev.indexOf(cur) === -1 && prev.push(cur); return prev; },[]); alert(newArr); //[3,4,1,2]
-
实现原理
① 初始化一个空数组
② 将需要去重处理的数组中的第1项在初始化数组中查找,如果找不到(空数组中肯定找不到),就将该项添加到初始化数组中
③ 将需要去重处理的数组中的第2项在初始化数组中查找,如果找不到,就将该项继续添加到初始化数组中
④ ……
⑤ 将需要去重处理的数组中的第n项在初始化数组中查找,如果找不到,就将该项继续添加到初始化数组中
⑥ 将这个初始化数组返回 -
数组降维
var arr = [[3,3],[4,4,1],[3,2,1,2]]; var newArr = arr.reduce(function (prev,cur) { return prev.concat(cur) },[]); alert(newArr);
- 计算数组中每个元素出现的次数
let names = ['alice','lucy','lucy','hanmeimei']; let nameNum = names.reduce(function (prev,cur) { if(cur in prev){ prev[cur]++; }else { prev[cur] = 1; } return prev; },{}) alert(nameNum);