Я думаю, что вы можете достичь этого, используя ES6 следующим образом:
let arr = [{
num : 5, // should stay, highest number is 5
id :10
},
{
num : 4, // should go, highest number is 5
id : 10
},
{
num : 5, // should stay, highest number is 5
id : 10
},
{
num : 1, // should go, highest number is 5
id : 10
},
{
num : 2, // Should stay, highest number is 2
id : 11
}];
let ids = Array.from(new Set(arr.map(i => i.id)));
let result = [];
Array.from(new Set(arr.map(i => i.id))).forEach(a => {
let tmp = arr.filter(i => i.id === a).sort((a,b) => b.num - a.num);
tmp.filter(i => i.num === tmp[0].num).map(j => result.push(j));
});
console.log(result);
Оператор Set предназначен для удаления дубликатов.
Сначала получите идентификаторы в массив, а затем l oop, чтобы получить каждый набор объектов в массиве, чтобы окончательно объединить их, добавив в массив результатов