首页 > 解决方案 > 仅对对象数组中的数值求和

问题描述

鉴于这种数组

const arr = [{
    a: 12,
    b: "A"
    c: 17
  },
  {
    a: 12,
    b: "B"
    c: 17
  },
  {
    a: 12,
    b: "C"
    c: 17
  }
];

对数组中的所有对象求和的最有效方法是什么?结果将是[29,29,29]

我试过arr.map(a => Object.values(a).reduce((p,c) => p+c)) 了,但这会将非数字值附加到结果中。

标签: javascript

解决方案


只需在减少之前根据类型过滤值

const arr = [{a: 12,b: "A",c: 17},{a: 12,b: "B",c: 17},{a: 12,b: "C",c: 17}];

let final = arr.map(a => Object.values(a).filter(v => typeof v === 'number').reduce((p, c) => p + c))

console.log(final)

或者您可以在 reduce 方法本身中执行此操作,根据其类型添加当前值,如果类型是数字,则添加它,否则添加 0

const arr = [{a: 12,b: "A",c: 17},{a: 12,b: "B",c: 17},{a: 12,b: "C",c: 17}];

let final = arr.map(a => Object.values(a).reduce((p, c) => p + (typeof c === 'number' ? c : 0)))

console.log(final)


推荐阅读