Сравнить массив строк и массив объектов и добавить недостающие значения в массив объектов
Всем привет, подскажите, плиз, что у меня не так с кодом. Есть два массива:
let template = ['a', 'b', 'c', 'd', 'e'];
let features = [{
name: 'a',
value: 111
},
{
name: 'c',
value: 222
}
];
Мне нужно получить обновленный features такого вида:
let features = [{
name: 'a',
value: 111
},
{
name: 'b',
value: 'DEFAULT'
},
{
name: 'c',
value: 222
},
{
name: 'd',
value: 'DEFAULT'
},
{
name: 'e',
value: 'DEFAULT'
}
];
Т.е. в массив features нужно добавить недостающие обьекты с value 'DEFAULT' для имен, которых нет в массиве template. Мой вариант не работает, ставила brake для выхода из циклов, но не помогает ((
let result = [];
for (let s of template) {
for (let z of features) {
if (s === z.name) {
result.push(z)
} else {
result.push({
name: s,
value: 'DEFAUILT'
})
}
}
}
Ответы (1 шт):
Автор решения: vsemozhebuty
→ Ссылка
У вас дублируются добавляемые объекты, потому что вы пушите при несовпадении любого объекта с текущим шаблоном, а нужно только если ни один объект не совпал с шаблоном. Попробуйте так:
let template = ['a', 'b', 'c', 'd', 'e'];
let features = [{
name: 'a',
value: 111
},
{
name: 'c',
value: 222
}
];
let result = [];
for (let s of template) {
const found = features.find(feature => feature.name === s);
result.push(found || { name: s, value: 'DEFAUILT' });
}
console.log(result);