You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何结合filter与reduce实现数组数值求和?含代码问题排查

解决人员数组数值求和问题(箭头函数+filter/reduce实现)

核心需求实现

如果你需要提取数组中每个人员对象里的所有数值类型属性并求和,同时支持空数组返回0,可以用箭头函数结合reduce和filter实现:

const totalNums = (arr) => {
  return arr.reduce((total, person) => {
    // 提取当前对象的所有属性值,过滤出数值类型
    const numericValues = Object.values(person).filter(val => typeof val === 'number');
    // 将当前对象的数值累加到总和中
    return total + numericValues.reduce((sum, num) => sum + num, 0);
  }, 0);
};

如果你的需求只是提取age属性求和(匹配示例场景),可以简化成更简洁的版本:

const totalNums = (arr) => arr.reduce((total, person) => total + (person.age ?? 0), 0);

测试示例

// 示例输入数组
const people = [
  { name: 'Clarie', age: 22 },
  { name: 'Bobby', age: 30 },
  { name: 'Antonio', age: 40 }
];

console.log(totalNums(people)); // 输出92
console.log(totalNums([])); // 输出0

原代码错误分析

  1. 第一个版本错误:
const totalNums = arr => arr.reduce((a,b) => a + b, 0)

这里的b是数组中的人员对象,直接执行a + b会把对象转为字符串拼接,得到类似"0[object Object][object Object]"的无效结果,而非数值求和。

  1. 第二个版本错误:
function totalNums(person) {
  person.reduce((a,b) => a + b, 0)
  return person.age;
}
  • 参数person实际是数组,数组没有age属性,返回值为undefined;
  • reduce的运算结果未被使用,属于无效执行;
  • 传入空数组时,person.age依然是undefined,不符合空数组返回0的要求。

内容的提问来源于stack exchange,提问作者SarahCodes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 07:20:36