У меня есть массив объектов, подобный этому:
let arr = [
{id: 1, nb: 1},
{id: 2, nb: 1},
{id: 3, nb: 1},
{id: 1, nb: 2},
{id: 1, nb: 3},
{id: 2, nb: 2},
]
Я хочу получить массив объектов, который удаляет дублирующиеся элементы, выбирая те, которые имеют наибольшее значение nb
. Это значит, что я хочу получить:
arr2 = [
{id: 1, nb: 3},
{id: 2, nb: 2},
{id: 3, nb: 1},
]
Как этого добиться?
EDIT:
Я протестировал одно из приведенных ниже решений со следующими данными и заметил, что исходный массив изменен:
let arr = [
{id: 1, nb: 1},
{id: 1, nb: 2},
{id: 1, nb: 3},
{id: 2, nb: 2},
{id: 2, nb: 3},
{id: 2, nb: 1},
{id: 3, nb: 1},
{id: 2, nb: 4},
{id: 1, nb: 10},
{id: 2, nb: 6},
];
console.log(arr);
let tmp = {};
var result = {};
for(let i=0; i<arr.length; i++) {
if( !tmp[arr[i].id] ) {
tmp[arr[i].id] = arr[i];
} else {
if( tmp[arr[i].id].nb < arr[i].nb ) {
tmp[arr[i].id].nb = arr[i].nb;
}
}
}
result = Object.values(tmp);
console.log(result);
console.log(arr);
Outuput:
> Array [Object { id: 1, nb: 1 }, Object { id: 1, nb: 2 }, Object { id: 1, nb: 3 }, Object { id: 2, nb: 2 }, Object { id: 2, nb: 3 }, Object { id: 2, nb: 1 }, Object { id: 3, nb: 1 }, Object { id: 2, nb: 4 }, Object { id: 1, nb: 10 }, Object { id: 2, nb: 6 }]
> Array [Object { id: 1, nb: 10 }, Object { id: 2, nb: 6 }, Object { id: 3, nb: 1 }]
> Array [Object { id: 1, nb: 10 }, Object { id: 1, nb: 2 }, Object { id: 1, nb: 3 }, Object { id: 2, nb: 6 }, Object { id: 2, nb: 3 }, Object { id: 2, nb: 1 }, Object { id: 3, nb: 1 }, Object { id: 2, nb: 4 }, Object { id: 1, nb: 10 }, Object { id: 2, nb: 6 }]