JavaScript数组reduce方法
-
reduce()
reduce 为数组中的每一个元素依次执行回调函数,不包括数组中被删除或从未被赋值的元素,接受四个参数:初始值(或者上一次回调函数的返回值),当前元素值,当前索引,调用 reduce 的数组。arr.reduce(callback,[initialValue])
callback参数:
参数 描述 preValue 上次回调函数返回值,或者是提供的初始值(initialValue) curValue 数组中当前被处理的元素 ndex 当前调用数组元素数组下标 rray 当前数组 initialValue参数:
参数 描述 initialValue 首次调用 callback 的参数 -
reduce使用实例
a.去重:(当然你说用
[...new Set(arr)]
我也不和你犟)let array = [1,2,3,4,4,1] let proArr = array.reduce((pre,cur)=>{ if(!pre.includes(cur)){ return pre.concat(cur); }else{ return pre; } },[]); console.log(proArr); // [1, 2, 3, 4]
b.计数:
let fruits = ['apple', 'orange', 'apple', 'banana', 'watermelon']; let fruitNum = fruits.reduce((pre,cur)=>{ if(cur in pre){ pre[cur]++; }else{ pre[cur] = 1; } return pre; },{}); console.log(fruitNum); //{apple: 2, orange: 1, banana: 1, watermelon: 1}
c.多维数组转一维
let array = [[0, 1], [2, 3], [4,[5,6,7,[8,9,[10]]]]] let proArr = function(arr){ return array.reduce((pre,cur)=>pre.concat(Array.isArray(cur)?newArr(cur):cur),[]) } console.log(proArr(arr)); //[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
3.最后
reduceRight,该方法用法与reduce其实是相同的,只是遍历的顺序相反,它是从数组的最后一项开始,向前遍历到第一项。