JavaScript新手求助:如何用非for循环计算对象数组年龄总和
对象数组求和的最优解法:使用reduce
针对你需要计算对象数组中用户年龄总和的需求,最适合的方法是使用Array.prototype.reduce()——这是JS数组专门用于汇总/累加操作的方法,完全不需要额外的外部变量,也不会生成多余的中间数组。
具体实现代码
const users=[ {firstName:"john",lastName:"Biden",age:26}, {firstName:"jimmy",lastName:"cob",age:75}, {firstName:"sam",lastName:"lewis",age:50}, {firstName:"Ronald",lastName:"Mathew",age:26}, ]; const totalAge = users.reduce((accumulator, currentUser) => { return accumulator + currentUser.age; }, 0); // 0是累加器的初始值 console.log(totalAge); // 输出177
简单解释
accumulator:就是我们的累加结果,一开始是传入的初始值0,每一轮循环会更新为新的总和。currentUser:当前循环到的数组里的用户对象,直接取它的age属性加到累加器上即可。- 整个reduce方法会自动遍历完所有元素,最后返回最终的累加结果,不需要手动管理循环或者外部变量。
为什么不用你提到的其他方法?
- 你说
map会生成新数组,如果先用map提取所有age再求和(比如users.map(u => u.age).reduce((a,b)=>a+b,0)),也能实现,但会多生成一个只存年龄的中间数组,没必要。 forEach确实可以做,但需要像for循环那样声明外部变量存总和,代码不够简洁,也不如reduce语义化(reduce一看就知道是在做汇总操作)。
内容的提问来源于stack exchange,提问作者Abhijeet
相关产品推荐
相关产品推荐

