[英]Merge property from an array of objects into another based on property value lodash
[英]Extract property from an array of objects and create another one base on this property via lodash?
我有以下數組:
[
{
baseAsset: 'XRP',
quoteAsset: 'ETH',
quoteAssetPrecision: 6,
baseAssetPrecision: 8,
price: '0.00025170'
},
{
baseAsset: 'MOD',
quoteAsset: 'BTC',
quoteAssetPrecision: 8,
baseAssetPrecision: 4,
price: '0.00004280'
},
{
baseAsset: 'MOD',
quoteAsset: 'ETH',
quoteAssetPrecision: 8,
baseAssetPrecision: 4,
price: '0.00116700'
},
{
baseAsset: 'ENJ',
quoteAsset: 'BTC',
quoteAssetPrecision: 8,
baseAssetPrecision: 8,
price: '0.00004508'
},
{
baseAsset: 'ENJ',
quoteAsset: 'ETH',
quoteAssetPrecision: 6,
baseAssetPrecision: 8,
price: '0.00064370'
},
{
baseAsset: 'STORJ',
quoteAsset: 'BTC',
quoteAssetPrecision: 8,
baseAssetPrecision: 8,
price: '0.00002090'
},
{
baseAsset: 'STORJ',
quoteAsset: 'ETH',
quoteAssetPrecision: 6,
baseAssetPrecision: 8,
price: '0.00029910'
}
]
我想得到什么:
[
{
ticker: 'XRP',
precision: 8,
},
{
ticker: 'MOD',
precision: 4,
},
{
ticker: 'BTC',
precision: 8,
},
{
ticker: 'ENJ',
precision: 8,
},
{
ticker: 'STORJ',
precision: 8,
},
{
ticker: 'ETH',
precision: 6,
}
]
如您所見,每個precision
道具都與資產相關聯並且不會更改。 我想從我的貨幣對數組中提取每種貨幣及其precision
。 通過lodash
可以提供什么優雅的解決方案? 接受其他選項。 我試圖使用本機 javascript 來實現這一點,但解決方案並不讓我滿意:
const currenciesFetched = tradingPairsWithPrices
.flatMap((pair) => [
{
ticker: pair.baseAsset,
precision: pair.baseAssetPrecision,
},
{
ticker: pair.quoteAsset,
precision: pair.quoteAssetPrecision,
},
])
.filter((v, i, a) => {
return a.findIndex((t) => t.ticker === v.ticker) === i
})
有任何想法嗎?
因此,如果目標是獲得ticker
+ precision
uniq 組合,並且我們不期望(所以不要處理)同一ticker
具有不同precision
的情況,那么我認為最簡單的方法就是使用原生{}
作為收集器(或Set
為更指定的替代方案):
const accumulator = {};
tradingPairsWithPrices.forEach(pair => {
accumulator[pair.baseAsset] = pair.baseAssetPrecision;
accumulator[pair.quoteAsset] = pair.quoteAssetPrecision;
});
return accumulator
.entries()
.map(([ticker, precision]) => ({ ticker, precision }));
使用 lodash 仍然可以實現這一點:
_.chain(traidingPairsWithPrices)
.flatMap(splitBaseAndQuote) // as you already do
.uniqBy('ticker')
.value()
如果你有一個很長的列表,每個ticker
值都有很多條目,那么第一種方法會更快。 但可能,沒有那么明顯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.