首页 > 解决方案 > 如何使用下划线对这个哈希数组进行排序和过滤

问题描述

我想使用以下哈希数组中的underscore.js每一个来获取最高价格。tokenId我想这需要两次遍历数组,但也许有更有效的方法。使用下划线仅获取一个哈希键tokenId并选择价格最高且迭代次数最少的整个数组集的最佳方法是什么?

const data = [
    {
        "tokenId": 1,
        "price": 1.8
    },
    {
        "tokenId": 1,
        "price": 2.0 
    },
    {
        "tokenId": 1,
        "price": 1.9
    },    
    {
        "tokenId": 2,
        "price": 5.0 
    },
    {
        "tokenId": 2,
        "price": 1.0 
    },
    
    {
        "tokenId": 3,
        "price": 1.9
    }    
]

// final result should be
// sortedFiltered = [{tokenId: 1, price: 2.0}, {tokenId: 2, price: 5.0}, {tokenId: 3, price: 1.9}]

标签: javascriptsortingunderscore.js

解决方案


reduce 可以在一次迭代中完成。使用累加器保持由 tokenId 索引的最大价格值。

const data = [
    {
        "tokenId": 1,
        "price": 1.8
    },
    {
        "tokenId": 1,
        "price": 2.0 
    },
    {
        "tokenId": 1,
        "price": 1.9
    },    
    {
        "tokenId": 2,
        "price": 5.0 
    },
    {
        "tokenId": 2,
        "price": 1.0 
    },
    
    {
        "tokenId": 3,
        "price": 1.9
    }    
]

// one iteration, with a custom function
const maxes = data.reduce((acc, o) => {
  if (acc[o.tokenId] === undefined) acc[o.tokenId] = 0;
  if (acc[o.tokenId] < o.price) acc[o.tokenId] = o.price;
  return acc;
}, {});

console.log(maxes);


推荐阅读