reduce() 是数组的归并方法,与forEach()、map()、filter()等迭代方法一样都会对数组每一项进行遍历,但是reduce() 可同时将前面数组项遍历产生的结果与当前遍历项进行运算,这一点是其他迭代方法无法企及的

arr.reduce() 不可改变原数组

  1. reduce((previousValue, currentValue, currentIndex, array) => {
  2. return previousValue + currentValue
  3. }, initialValue)
  4. previousValue(前一次调用 callbackfn 得到的返回值)
  5. currentValue(数组中正在处理的元素)
  6. currentIndex(数组中正在处理的元素的索引)
  7. array被遍历的对象
  8. 作为第一次调用 callback 函数时参数 previousValue 的值。若指定了初始值 initialValue
  9. currentValue 则将使用数组第一个元素;否则 previousValue 将使用数组第一个元素,
  10. currentValue 将使用数组第二个元素。

1. 求数组项之和

  1. 由于传入了初始值0,所以开始时prev的值为0cur的值为数组第一项3
  2. 相加之后返回值为3作为下一轮回调的prev值,然后再继续与下一个数组项相加,
  3. 以此类推,直至完成所有数组项的和并返回。
  4. let arr = [3,9,4,3,6,0,9];
  5. let sum = arr.reduce((prev, cur) => {
  6. return prev + cur;
  7. },0);
  8. let arr = [{numb:2},{numb:3},{numb:5}];
  9. let sum = arr.reduce((prev, cur) => {
  10. return prev + cur.numb;
  11. },0);

2. 求数组项最大值

  1. let arr = [3,9,4,3,6,0,9];
  2. let max = arr.reduce((prev, cur) => {
  3. return Math.max(prev,cur);
  4. });
  5. var arr = [{numb:2},{numb:3},{numb:5}];
  6. var max = arr.reduce((prev, cur) => {
  7. console.log(prev, cur)
  8. return Math.max(prev,cur.numb);
  9. },0);

3. 数组去重

  1. var arr = [3,9,4,3,6,0,9];
  2. var newArr = arr.reduce(function (prev, cur) {
  3. prev.indexOf(cur) === -1 && prev.push(cur);
  4. return prev;
  5. },[]);