提问人:DonkeySticks 提问时间:3/12/2022 最后编辑:DonkeySticks 更新时间:3/12/2022 访问量:133
如何使用 ES 标准按数组数据对对象值求和?[关闭]
How can I sum object values by array data using ES standard? [closed]
问:
我有一个对象数组。每个对象都有一个带有数组列表的“tag”属性。此列表中的值从一个对象重复到另一个对象。我想根据“标签”数组总结“成本”和“收入”。不确定解释是否有意义,但我有下面的数据结构。
我希望数据是什么样子的:
const expected =
[ { cost: 500, revenue: 800, tag: 'new' }
, { cost: 800, revenue: 1400, tag: 'equipment' }
, { cost: 1300, revenue: 1650, tag: 'wholesale' }
, { cost: 300, revenue: 600, tag: 'old' }
]
数据的样子:
const data =
[ { cost: 500, revenue: 800, tag: [ 'new', 'equipment', 'wholesale' ]}
, { cost: 300, revenue: 600, tag: [ 'old', 'equipment' ]}
, { cost: 800, revenue: 850, tag: [ 'wholesale' ]}
]
答:
1赞
cmgchess
3/12/2022
#1
A 和 to 分组 by 标签,然后获取每个标签的值reduce
forEach
var a= [
{
"cost": 500,
"revenue": 800,
"tag": [
"new",
"equipment",
"wholesale"
]
},
{
"cost": 300,
"revenue": 600,
"tag": [
"old",
"equipment"
]
},
{
"cost": 800,
"revenue": 850,
"tag": [
"wholesale"
]
}
]
let x = Object.values(a.reduce((acc,{cost,revenue,tag})=>{
tag.forEach((t) => {
if(!acc[t])acc[t]={tag:t,cost:0,revenue:0}
acc[t].revenue+=revenue
acc[t].cost+=cost
})
return acc;
},{}))
console.log(x)
评论