js 数组求和reduce

本文详细解释了JavaScript中的reduce方法,包括回调函数的参数含义、有初始值和无初始值的不同应用场景,以及如何进行数组求和、对象属性求和、二维数组转换和元素出现次数统计。

 第一次执行回调函数时,不存在“上一次的计算结果”。如果需要回调函数从数组索引为 0 的元素开始执行,则需要传递初始值。

否则,数组索引为 0 的元素将被作为初始值 initialValue,迭代器将从第二个元素开始执行(索引为 1 而不是 0)。

reduce((previousValue, currentValue, currentIndex, array) => {}, initialValue)

// 简洁语法
reduce(callbackFn, initialValue)

// 简洁语法(无初始值)
reduce(callbackFn)


返回值:

reduce 方法的返回值就是遍历所有数组执行回调函数后的返回值。




备注:


callbackFn:回调函数

previousValue:上一次回调函数的返回值,第一次调用回调函数时,如果指定的初始值 initialValue,那么该参数值就是 initialValue,否则就是数组元素的第一个。

currentValue:数组中正在处理的元素。在第一次调用时,若指定了初始值 initialValue,那么当前处理的元素就是数组的第一个元素,否则的话就是第二个元素。

currentIndex:数组中正在处理的元素的索引。若指定了初始值 initialValue,则起始索引号为 0,否则从索引 1 起始。

array:用于遍历的数组。

initialValue:初始值,也就是第一次调用回调函数时参数 previousValue,是否指定初始值将会影响其它几个参数的值。

1、有初始值求和

let arr = [1, 2, 3, 4, 5, 6, 7, 8];
const total = arr.reduce((previousValue, currentValue, currentIndex, array) => {
  console.log(previousValue, currentValue, currentIndex, array)
  return previousValue + currentValue; // 100 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8
}, 100);
console.log(total); // 136

 

2、简单的数组求和

let arr1 = [1, 2, 3, 4, 5, 6, 7, 8];
const total1 = arr1.reduce((previousValue, currentValue) => {
  return previousValue + currentValue;
}, 0);
console.log(total1); // 36

3、数组对象求和

let arr2 = [{ x: 1 }, { x: 2 }, { x: 3 }];
const total2 = arr2.reduce((previousValue, currentValue) => {
  return previousValue + currentValue.x;
}, 0);
console.log(total2); // 6

4、二维数组转一维数组

let arr3 = [[0, 1], [2, 3], [4, 5]];
const flattened = arr3.reduce((previousValue, currentValue) => {
  return previousValue.concat(currentValue);
}, [])
console.log(flattened); // [0, 1, 2, 3, 4, 5]

5、计算数组元素出现次数

let names = ['小猪课堂', '张三', '李四', '王五', '小猪课堂']
let countedNames = names.reduce(function (allNames, name) {
  // 判断当前数组元素是否出现过
  if (name in allNames) {
    allNames[name]++
  } else {
    allNames[name] = 1
  }
  return allNames
}, {})
console.log(countedNames); // {小猪课堂: 2, 张三: 1, 李四: 1, 王五: 1}

 

### 使用 `reduce` 方法对数组进行求和 JavaScript 中的 `reduce` 方法可以用来遍历数组并累积计算结果。对于求数组元素之和的任务,可以通过设置累加器(accumulator)来逐步积累每个元素的值。 以下是实现这一功能的具体代码示例: ```javascript const numbers = [1, 2, 3, 4, 5]; // 使用 reduce数组中的元素进行求和 const sum = numbers.reduce((accumulator, currentValue) => accumulator + currentValue, 0); console.log(sum); // 输出:15 ``` 在这个例子中,`reduce` 接收两个主要参数:一个是回调函数 `(accumulator, currentValue) => accumulator + currentValue`,另一个是可选的初始值 `0`[^4]。如果未提供初始值,则会默认使用数组的第一个元素作为初始值。 #### 关键点解析 - **累加器 (`accumulator`) 和当前值 (`currentValue`)** 在每次调用回调函数时,`accumulator` 存储的是前一步的结果,而 `currentValue` 是当前正在处理的数组元素。 - **初始值的作用** 初始值决定了第一次执行回调函数时 `accumulator` 的起始状态。如果没有指定初始值,`reduce` 将跳过第一个元素,并将其视为初始值。 #### 动态调整初值的情况 当需要处理更复杂的场景时,比如忽略某些特定条件下的数值或者操作其他数据结构时,也可以通过自定义逻辑扩展此方法的功能。 例如,假设我们有一个包含负数和其他类型的混合数组,只希望相加正整数部分: ```javascript const mixedNumbers = [1, -2, '3', null, 4]; const positiveSum = mixedNumbers.reduce( (accumulator, currentValue) => { if (typeof currentValue === 'number' && currentValue > 0) { return accumulator + currentValue; } return accumulator; }, 0 ); console.log(positiveSum); // 输出:5 ``` 这里增加了额外判断以确保仅考虑符合条件的数据项。 ### 总结 利用 `reduce()` 不仅能够轻松完成简单的数组求和任务,还可以灵活应对更加复杂的需求情境。其核心在于合理设计回调函数以及正确设定初始值。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值