首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据key合并数组并将它们的值相加。Javascript/Es6/React

问根据key合并数组并将它们的值相加。Javascript/Es6/React
EN

Stack Overflow用户
提问于 2020-11-28 03:29:25
回答 1查看 33关注 0票数 0

在一个数组中只有2个对象,我需要你的注意。我正在尝试找到一种方法,基于item.Symbol将这两个对象合并为一个对象,然后将它们对应的item.TotalCost、item.Price和item.Quantity的值添加到新对象中。

我试着做一个Set函数,但它们只是合并成一个对象,并且值没有相加。我正在接收一个类似这样的对象:

代码语言:javascript
复制
[{
    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
  }
]

到目前为止,我的代码如下:

代码语言:javascript
复制
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西斯领主祈祷,让他们响应我的号召。愿原力与你同在。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-28 03:35:06

使用Symbol属性作为键,将对象数组缩减为对象。如果对象上不存在该键,则将当前项的克隆指定给该键。如果存在,则将当前项的值添加到现有对象中:

​

代码语言:javascript
复制
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)

​

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65042887

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档