Используя .reduce()
, вы можете индексировать с помощью свойства price
. Число price
в объекте будет содержать текущий объект наибольшего значения для данной цены. Если ваш текущий объект, для которого вы выполняете итерацию, имеет более высокое значение value
, вы можете обновить индексированное значение для этой цены, чтобы оно содержало новый объект. Вы можете получить Object.values()
вашего накопленного объекта, чтобы получить уникальные объекты.
См. Пример ниже:
const data = [{ "title": "The Little Prince", "price": 49, "value": 20 }, { "title": "Watchmen", "price": 49, "value": 40 } ];
const res = Object.values(data.reduce((acc, obj) => {
const curr = acc[obj.price];
acc[obj.price] = curr ? (curr.value < obj.value ? obj : curr) : obj;
return acc;
}, {}));
console.log(res);
Или использование ES6 Карта может быть более подходящим вариантом для использования с .reduce()
:
const data = [{ "title": "The Little Prince", "price": 49, "value": 20 }, { "title": "Watchmen", "price": 49, "value": 40 } ];
const res = Array.from(data.reduce((m, obj) => {
const curr = m.get(obj.price);
return m.set(obj.price, curr ? (curr.value < obj.value ? obj : curr) : obj);
}, new Map).values());
console.log(res);