如何用underscore.js排序过滤哈希数组,提取每个tokenId的最高价格条目
实现方案
最优效率方案(仅1次遍历)
使用underscore的_.reduce方法仅需遍历原数组1次即可完成筛选,时间复杂度为O(n),是理论上的最优效率(无法做到比遍历所有元素更少的次数):
const sortedFiltered = _.reduce(data, (result, current) => { const existItem = _.find(result, { tokenId: current.tokenId }); if (!existItem) { result.push(current); } else if (current.price > existItem.price) { existItem.price = current.price; } return result; }, []);
高可读性方案(线性时间复杂度)
如果优先考虑代码可维护性,可使用分组取最大值的组合写法,整体时间复杂度同样为线性,仅多了分组的中间内存开销,常规业务场景下性能差异可忽略:
const sortedFiltered = _.chain(data) // 按tokenId分组 .groupBy('tokenId') // 每个分组取价格最高的条目 .map(group => _.maxBy(group, 'price')) .value();
两种方案最终输出均符合预期要求。
内容的提问来源于stack exchange,提问作者randombits
相关产品推荐
相关产品推荐

