1. 语法
arr.reduce(callback, initialValue)
callback:每个元素都要执行的回调函数
initicalValue:作为第一次调用 callback 的第一个参数。
2. 回调函数的参数
1、previousValue (上一次调用回调返回的值,或者是提供的初始值(initialValue),这个值可以使引用数据类型)
2、currentValue (数组中当前被处理的元素)
3、index (当前元素在数组中的索引)
4、array (调用 reduce函数的数组)
3. 实例解析
-
数组元素求和
var arr = [1,2,3,4]; var sum = arr.reduce(function(pre, item, index, arr){ console.log(pre, item, index); return pre + item; }); console.log(sum);
-
数组元素求乘积
var arr = [1,2,3,4]; var mul = arr.reduce(function(pre, item, index, arr){ console.log(pre, item, index); return pre * item; }); console.log(mul);
-
判断数组元素出现次数
var arr = [1,2,3,'str1',"str2","str2",1,2]; arr.reduce(function(pre, item, index, arr){ console.log(pre, item); if(item in pre){ pre[item]++; } else{ pre[item] = 1; } return pre; },{}) //初始pre是一个空对象
-
去除数组中的重复元素
var arr = [1,2,3,'str1',"str2","str2",1,2,true,true,false,{},{}]; var newArr = arr.reduce(function(pre,item){ if(!pre.includes(item)){ pre.push(item); } return pre; },[]) //初始pre是个空数组 console.log(newArr); //[1, 2, 3, 'str1', 'str2', true, false, {}, {}]
-
数组内部分组
//给定一个数组var a = [1,2,3,4,5,6,7,...] //使用一次reduce,五个元素一组。 var arr = [1,2,3,4,5,6,7,8,9,10,11,12]; arr.reduce(function(pre, item, index, arr) { var begin = index * 5; var end = begin + 5; var result = arr.slice(begin,end); if(result.length){ pre.push(result); } return pre; },[])