在一个数组中只有2个对象,我需要你的注意。我正在尝试找到一种方法,基于item.Symbol将这两个对象合并为一个对象,然后将它们对应的item.TotalCost、item.Price和item.Quantity的值添加到新对象中。
我试着做一个Set函数,但它们只是合并成一个对象,并且值没有相加。我正在接收一个类似这样的对象:
[{
CompanyName: "Microsoft Corp."
Date: 1606503905
Price: 215.23
Quantity: 50
Symbol: "MSFT"
TotalCost: 10761.5
},
{
CompanyName: "Microsoft Corp."
Date: 1606503913
Price: 215.23
Quantity: 25
Symbol: "MSFT"
TotalCost: 5380.75
}
]到目前为止,我的代码如下:
let set = new Set()
const newSet = Objects.filter(item => {
if (!set.has(item.Symbol)) {
set.add(item.Symbol)
return true;
}
return false},set
)
console.log(newArray)请注意,Objects变量包含第一段代码中显示的对象数组,我编写的block.The集函数仅根据它们的Symbol将它们合并为一个对象,但我不知道从哪里开始。我在向Javascript的领主和Es6西斯领主祈祷,让他们响应我的号召。愿原力与你同在。
发布于 2020-11-28 03:35:06
使用Symbol属性作为键,将对象数组缩减为对象。如果对象上不存在该键,则将当前项的克隆指定给该键。如果存在,则将当前项的值添加到现有对象中:
const arr = [{"CompanyName":"Microsoft Corp.","Date":1606503905,"Price":215.23,"Quantity":50,"Symbol":"MSFT","TotalCost":10761.5},{"CompanyName":"Microsoft Corp.","Date":1606503913,"Price":215.23,"Quantity":25,"Symbol":"MSFT","TotalCost":5380.75}]
const newArray = Object.values(
arr.reduce((acc, o) => {
if(!acc[o.Symbol]) acc[o.Symbol] = { ...o }
else {
acc[o.Symbol].Price += o.Price
acc[o.Symbol].Quantity += o.Quantity
acc[o.Symbol].TotalCost += o.TotalCost
}
return acc
}, {})
);
console.log(newArray)
https://stackoverflow.com/questions/65042887
复制相似问题