如何合并具有相似对象的2个数组?

时间:2018-10-23 16:36:25

标签: javascript arrays

IE:我有2个数组,每个数组带价格,一个数组带名称。

带有价格的那个更长,我只希望最终的数组是只有名称的较小数组的大小。

价格数组中的对象:

{
  currency: 'BTC',
  price: '6500'
},
{
  currency: 'NEM',
  price: '1'
},

名称数组中的对象:

{
  currency: 'BTC',
  name: 'Bitcoin'
}

最终数组应仅包含name数组中存在的对象,还应具有price数组中的prices键。

{
  currency: 'BTC',
  name: 'Bitcoin',
  price: '6500'
}

我已经使用NPM软件包完成了此任务,但是该软件包较旧,编译时存在错误: Error while running NPM run build (ERROR in index_bundle.js from UglifyJs)

我也在这里找到了这个答案:How to merge 2 arrays with objects in one?但是,没有一个答案有效。较小的数组也不会过滤该数组,但是键也不会合并。

1 个答案:

答案 0 :(得分:3)

一种替代方法是使用函数map生成具有所需输出的新数组。

这种方法使用功能find来检索与对象名称name.currency === price.currency相关的特定对象价格。

let prices = [{  currency: 'BTC',  price: '6500'},{  currency: 'BSS',  price: '850'},{  currency: 'USD',  price: '905'}],
    names = [{  currency: 'BTC',  name: 'Bitcoin'},{  currency: 'BSS',  name: 'Bolivar'}],
    result = names.map(n => Object.assign({}, n, prices.find(p => p.currency === n.currency)));

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }