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?但是,没有一个答案有效。较小的数组也不会过滤该数组,但是键也不会合并。
答案 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; }