比较数组中的多个对象,并在某个公共值JavaScript / Vue.js时求和值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了比较数组中的多个对象,并在某个公共值JavaScript / Vue.js时求和值相关的知识,希望对你有一定的参考价值。

对于更有经验的程序员来说,这可能是一项简单的任务。我一直在寻找答案,但不知怎的,我还没有找到解决方案。所以,我的问题是如下。

有一个包含多个对象的数组,例如在我的情况下:

const array = [
  Id: 0, Name: 'John', Currency: 'USD', Amount: 25,
  Id: 1, Name: 'Matt', Currency: 'EUR', Amount: 460,
  Id: 2, Name: 'Lisa', Currency: 'YEN', Amount: 60000,
  Id: 3, Name: 'Pete', Currency: 'EUR', Amount: 2400
]

如您所见,对象值之间存在相似之处。在我的情况下,我希望有一个解决方案,其中所有相同的货币和它们的价值相结合::

(例如货币:'EUR'(obj1&obj2),金额:460(obj1)+ 2400(obj2)= 2860)

所以,最终的结果看起来像这样:

const finalarray = [
  Currency: 'USD', Amount: 25,
  Currency: 'EUR', Amount: 2860,
  Currency: 'YEN', Amount: 60000
]

我个人,不介意最后一个数组中是否存在对象的其他键,只要:

1)数组的对象将其中一个值与同一个键的所有其他值进行比较,并且

2)具有相同密钥值的金额相互组合,全部。

我正在使用Vue.js项目,因此我需要使用javascript语言。答案是什么,越简单越好,因为我希望尽可能保持代码的紧凑性。但最重要的是它解决了这个问题。我有一个Computed属性currencyList(),它将返回新数组。

先感谢您!

答案

我想到的一个非常快速的解决方案是:

const accumulator = (array) => array.reduce((res, item) =>
              res.set(item.Currency, (res.get(item.Currency)||0) + item.Amount), new Map());

const values = Array.from(accumulator(array), item => (item[0]: item[1]))

成本是O(n)那很好。你可能会美化它

以上是关于比较数组中的多个对象,并在某个公共值JavaScript / Vue.js时求和值的主要内容,如果未能解决你的问题,请参考以下文章

比较两个对象数组并在新数组中返回匹配值

数组对象修改某一个属性值的数据类型

list中如何为一个对象附多个值

js中判断对象数组中是不是有某个属性值

js数组移除制定对象 数组拆分成多个数组

(去重)JS比较两个数组对象,取出不同的值