Предположим, у меня есть список таких объектов:
let b = [
{
name: "test1",
connectedTo: "",
},
{
name: "test1",
connectedTo: "test1.test2.test3"
},
{
name: "test2",
connectedTo: "",
},
{
name: "test3",
connectedTo: "",
}
]
Я хочу получить элементы без дубликатов name
, а также, если есть дубликаты, взять один без пустых connectedTo
. Итак, из приведенного выше примера результат, который я ожидаю, таков:
let result = [
{
name: "test1",
connectedTo: "test1.test2.test3"
},
{
name: "test2",
connectedTo: "",
},
{
name: "test3",
connectedTo: "",
}
]
Вот подход, использующий функцию Array#reduce
:
let b = [
{
name: "test1",
connectedTo: "",
},
{
name: "test1",
connectedTo: "test1.test2.test3"
},
{
name: "test2",
connectedTo: "",
},
{
name: "test3",
connectedTo: "test1.test2",
},
{
name: "test3",
connectedTo: "",
}
];
const result = Object.values(b.reduce((acc, cur) => {
if (!acc[cur.name] || !acc[cur.name].connectedTo)
acc[cur.name] = cur;
return acc;
}, {}));
console.info(result);