如何从对象数组提取资产精度属性生成新数组,有哪些Lodash实现方案?
Lodash 实现方案
直接结合_.flatMap拍平数组,再用_.uniqBy按ticker字段去重即可,代码简洁易读:
const currenciesFetched = _.uniqBy( _.flatMap(tradingPairsWithPrices, pair => [ { ticker: pair.baseAsset, precision: pair.baseAssetPrecision }, { ticker: pair.quoteAsset, precision: pair.quoteAssetPrecision } ]), 'ticker' )
因为同个币种的精度是固定的,_.uniqBy会保留第一个出现的币种条目,完全符合需求。
原生JS 优化实现方案
如果你不想引入Lodash依赖,也可以用Map实现O(n)时间复杂度的去重,比原有filter + findIndex的O(n²)复杂度性能更好,适合交易对数量较多的场景:
const currencyMap = new Map() tradingPairsWithPrices.forEach(pair => { // 未记录的币种才存入Map if (!currencyMap.has(pair.baseAsset)) { currencyMap.set(pair.baseAsset, pair.baseAssetPrecision) } if (!currencyMap.has(pair.quoteAsset)) { currencyMap.set(pair.quoteAsset, pair.quoteAssetPrecision) } }) // 转换为目标格式数组 const currenciesFetched = Array.from(currencyMap, ([ticker, precision]) => ({ ticker, precision }))
内容的提问来源于stack exchange,提问作者Denys Rybkin
相关产品推荐
相关产品推荐

