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

如何实现接收数组提取数字求和的函数?排查现有代码问题

问题排查与解决方案

原代码的问题分析

  • 参数命名混淆:函数接收的是人员数组,但参数名person容易误解为单个对象,语义不准确
  • reduce使用错误:
    • 调用reduce后未保存计算结果,直接丢弃了累加值
    • 回调函数a + b是把累加器和整个对象相加,没有提取对象的age属性进行计算
  • 返回值逻辑错误:直接返回person.age,但person是数组,根本不存在age属性,空数组调用时会返回undefined,不符合空数组返回0的要求

可行实现方案

基础版(直接累加age)

这个版本针对确定每个对象都有合法age数字的场景,用reduce直接完成累加,空数组传入时reduce的初始值0会直接返回,符合要求:

function totalNums(people) {
  return people.reduce((total, person) => total + person.age, 0);
}

// 测试用例
const samplePeople = [
  { name: 'Clarie', age: 22 },
  { name: 'Bobby', age: 30 },
  { name: 'Antonio', age: 40 },
];

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

健壮版(结合filter过滤无效数据)

如果需要处理可能存在无效age的场景(比如age不是数字、不存在age属性),可以先用filter筛选出有效数据,再用reduce累加:

function totalNums(people) {
  // 过滤出包含有效数字类型age的对象
  const validEntries = people.filter(person => 
    typeof person.age === 'number' && !isNaN(person.age)
  );
  return validEntries.reduce((total, person) => total + person.age, 0);
}

// 测试用例
const mixedPeople = [
  { name: 'Clarie', age: 22 },
  { name: 'Bobby', age: 30 },
  { name: 'Antonio', age: 40 },
  { name: 'Tom', age: 'invalid' }, // 会被过滤
  { name: 'Jerry' } // 无age属性,会被过滤
];

console.log(totalNums(mixedPeople)); // 输出92
console.log(totalNums([])); // 输出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 09:45:36