Quiero usar underscore.js para obtener el precio más alto para cada tokenId en la matriz de hash a continuación. Me imagino que esto requeriría ejecutar la matriz dos veces, pero tal vez haya una manera más eficiente. ¿Cuál es la mejor manera de utilizar el guión bajo para obtener solo un hash con clave tokenId y seleccionar el que tiene el precio más alto con la menor cantidad de iteraciones en todo el conjunto de matrices?
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}]Una reducción puede hacerlo en una iteración. Use el acumulador para mantener los valores de precio máximo indexados por 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);