Javascript 将对象数组中的所有值相加';parseFloat()后的s键
我在里面有一个对象数组,如下所示:Javascript 将对象数组中的所有值相加';parseFloat()后的s键,javascript,arrays,javascript-objects,Javascript,Arrays,Javascript Objects,我在里面有一个对象数组,如下所示: let ary = [ { a : 'something', b: '2', c: 'something' }, { a : 'something', b: '2', c: 'some
let ary = [
{
a : 'something',
b: '2',
c: 'something'
},
{
a : 'something',
b: '2',
c: 'something'
},
{
a : 'something',
b: '2',
c: 'something'
}
]
我需要将每个对象上的所有键b的值相加,所以我首先使用parseFloat将它们更改为数字,如下所示:
ary.forEach( item => {
item.b = parseFloat(item.b)
})
接下来,我在.map函数中使用reduce()
let total = ary.map((item, index) => {
return ary.reduce((a, b) => ({x: a.b + b.b}))
})
但我没有得到我想要的,它返回一个对象数组,两个对象的总值相同
array = [
{x : total},
{x : total}
]
我应该如何得到单一的总价值?喜欢
总计=2+2+2,每个2都来自ary中的b键。您可以尝试:
const total = ary.reduce((sum, item) => (sum + parseFloat(item.b)), 0);
使用一个循环,您将调用
parseFloat
并对所有b
属性进行求和。您可以通过分离对象的值、获取数字和使用reduce添加所有值来链接一些方法
var数组=[{a:'something',b:'2',c:'something'},{a:'something',b:'2',c:'something'},{a:'something',b:'2',c:'something'},
总和=数组
.map(({b})=>b)
.地图(编号)
.减少((a,b)=>a+b);
控制台日志(总和)代码>只需去掉.map()
,只保留.reduce()
@NinaScholz“我需要将所有键b的值“+”…只得到总数?”@Andreas我去掉了.map()并得到了TypeError:减少没有初始值的空数组我需要在map或forEach中做吗?@andromad。reduce()
就是你所需要的。不需要.map()
或.forEach()
。谢谢,它可以工作。。。事实上,这真的很有意义,因为我之前得到了两次总数,但我不能真正完全理解后面的0是做什么的。介意帮我更清楚地理解吗?从性能角度来看,reduce函数是解决这个问题的最佳方法吗?谢谢你的帮助,我现在就出去,稍后会尝试你的方法。