从对象数组中提取 属性 并通过 lodash 基于此 属性 创建另一个对象?
Extract property from an array of objects and create another one based 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
的唯一组合,并且我们不期望(因此不处理)存在不同 precision
的情况相同的 ticker
,那么我认为最简单的方法就是使用原生 {}
作为收集器(或 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
值都有很多条目,那么第一种方法会更快一些。但可能,没那么明显。
我有以下数组:
[
{
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
的唯一组合,并且我们不期望(因此不处理)存在不同 precision
的情况相同的 ticker
,那么我认为最简单的方法就是使用原生 {}
作为收集器(或 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
值都有很多条目,那么第一种方法会更快一些。但可能,没那么明显。