let arr = [
{id: 1, title: "Глобальный администратор"},
{id: 4, title: "Преподаватель"},
{id: 2, title: "Ученик"},
{id: 1, title: "Глобальный администратор", checked: true},
{id: 4, title: "Преподаватель", checked: true}
]
[
{id: 2, title: "Ученик"},
{id: 1, title: "Глобальный администратор", checked: true},
{id: 4, title: "Преподаватель", checked: true}
]
const result = Object.values(arr.reduce((acc, n) => (
acc[n.id] = n.checked ? n : (acc[n.id] || n),
acc
), {}));
const result = arr.reduce((acc, n) => {
const i = acc.findIndex(m => m.id === n.id);
if (!~i || (!acc[i].checked && n.checked)) {
acc.push(n);
if (~i) {
acc.splice(i, 1);
}
}
return acc;
}, []);
// или
const result = Object
.values(arr.reduce((acc, n, i) => (
(!acc[n.id] || (!acc[n.id][0].checked && n.checked)) && (acc[n.id] = [ n, i ]),
acc
), {}))
.sort((a, b) => a[1] - b[1])
.map(n => n[0]);