🍉你不知道的Array.prototype.reduce()的魅力

简介: 🍉你不知道的Array.prototype.reduce()的魅力

前言


最近在复习知识点的过程总是会遇见reduce方法的身影,reduce方法好像并不常用,但是我觉得在某些场景下reduce方法还是非常适用的,那么这篇文章就来介绍reduce方法的基本适用以及它的适用场景,让我们一起来领略它的魅力吧!


语法


reduce() 方法对数组中的每个元素执行一个由您提供的reducer函数(升序执行),将其结果汇总为单个返回值。


参数


reducer 函数接收4个参数:

  1. Accumulator (acc) (累计器)
  2. Current Value (cur) (当前值)
  3. Current Index (idx) (当前索引)
  4. Source Array (src) (源数组)


返回值


函数累计处理的结果


一段代码总结


Array.prototype.reduce() 正确使用姿势


const array1 = [1, 2, 3, 4];
const reducer = (accumulator, currentValue) => accumulator + currentValue;
// 1 + 2 + 3 + 4
console.log(array1.reduce(reducer));
// expected output: 10
// 5 + 1 + 2 + 3 + 4
console.log(array1.reduce(reducer, 5));
// expected output: 15
复制代码


reduce如何运行的呢


看下面代码:


[0, 1, 2, 3, 4].reduce(function(accumulator, currentValue, currentIndex, array){
  return accumulator + currentValue;
});
复制代码


callback accumulator currentValue currentIndex array return value
first call 0 1 1 [0, 1, 2, 3, 4] 1
second call 1 2 2 [0, 1, 2, 3, 4] 3
third call 3 3 3 [0, 1, 2, 3, 4] 6
fourth call 6 4 4 [0, 1, 2, 3, 4] 10


reduce的使用场景


场景一:求数组里的所有值的和


var total = [ 0, 1, 2, 3 ].reduce(
  ( acc, cur ) => acc + cur,
  0
);
复制代码


场景二:累加对象数组里的值


var initialValue = 0;
var sum = [{x: 1}, {x:2}, {x:3}].reduce(
    (accumulator, currentValue) => accumulator + currentValue.x
    ,initialValue
);
console.log(sum) // logs 6
复制代码


场景三:数组扁平化


var flattened = [[0, 1], [2, 3], [4, 5]].reduce(
 ( acc, cur ) => acc.concat(cur),
 []
);
复制代码


场景四:计算数组中每个元素出现的次数


var names = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice'];
var countedNames = names.reduce(function (allNames, name) {
  if (name in allNames) {
    allNames[name]++;
  }
  else {
    allNames[name] = 1;
  }
  return allNames;
}, {});
// countedNames is:
// { 'Alice': 2, 'Bob': 1, 'Tiff': 1, 'Bruce': 1 }
复制代码


场景五:数组去重


let myArray = ['a', 'b', 'a', 'b', 'c', 'e', 'e', 'c', 'd', 'd', 'd', 'd']
let myOrderedArray = myArray.reduce(function (accumulator, currentValue) {
  if (accumulator.indexOf(currentValue) === -1) {
    accumulator.push(currentValue)
  }
  return accumulator
}, [])
console.log(myOrderedArray)
复制代码


最后


⚽本文介绍了reduce的基本使用以及使用场景~

⚾如果这篇文章对你有帮助的话,麻烦点赞收藏哟~

相关文章
|
7月前
|
JavaScript 前端开发
JavaScript 的数组方法 map()、filter() 和 reduce() 提供了函数式编程处理元素的方式
【5月更文挑战第11天】JavaScript 的数组方法 map()、filter() 和 reduce() 提供了函数式编程处理元素的方式。map() 用于创建新数组,其中元素是原数组元素经过指定函数转换后的结果;filter() 则筛选出通过特定条件的元素生成新数组;reduce() 将数组元素累计为单一值。这三个方法使代码更简洁易读,例如:map() 可用于数组元素乘以 2,filter() 用于选取偶数,reduce() 计算数组元素之和。
46 2
ES6系列笔记-数组方法reduce和forEach
ES6系列笔记-数组方法reduce和forEach
52 1
|
前端开发
前端学习案例19-数组方法reduce1
前端学习案例19-数组方法reduce1
46 0
前端学习案例19-数组方法reduce1
|
前端开发
前端学习案例20-数组方法reduce2
前端学习案例20-数组方法reduce2
41 0
前端学习案例20-数组方法reduce2
|
前端开发
前端学习案例14-数组方法map
前端学习案例14-数组方法map
76 0
前端学习案例14-数组方法map
|
前端开发
前端学习案例16-数组遍历方法6-reduce
前端学习案例16-数组遍历方法6-reduce
61 0
前端学习案例16-数组遍历方法6-reduce
|
前端开发
前端学习案例10-数组遍历方法2-foreach
前端学习案例10-数组遍历方法2-foreach
63 0
前端学习案例10-数组遍历方法2-foreach
|
前端开发
前端学习案例13-数组遍历方法4-map使用
前端学习案例13-数组遍历方法4-map使用
71 0
前端学习案例13-数组遍历方法4-map使用
|
JavaScript 前端开发 搜索推荐
不好意思!🍎我真的只会用 Array.prototype.sort() 写✍排序!
不好意思!🍎我真的只会用 Array.prototype.sort() 写✍排序!
75 0
深入浅出数组reduce,看完就会
reduce() 方法对数组中的每个元素按序执行一个由您提供的 reducer 函数,每一次运行 reducer 会将先前元素的计算结果作为参数传入,最后将其结果汇总为单个返回值。,这是官方MDN上给的一段话
167 0
深入浅出数组reduce,看完就会