比较数组中的多个对象,并在某个公共值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时求和值的主要内容,如果未能解决你的问题,请参考以下文章