Добавить новое поле в объект внутри массива
Не понимаю, в чём ошибка. Хочу добавить поле age в каждый объект массива
const arr = [{ name: "John" }, { name: "Koul" }];
const addNew = (arr) => {
const copyArr = [...arr];
const result = copyArr.forEach((el) => {
el["age"] = "23";
});
return result;
};
console.log(addNew(arr), "res");
Ответы (5 шт):
Автор решения: Aziz Umarov
→ Ссылка
Сделайте так. Поскольку forEach ничего не возращает
const arr = [{ name: "John" }, { name: "Koul" }];
const addNew = arr => [...arr].map(el => {
el.age = "23"; return el;
})
console.log(addNew(arr), "res");
Автор решения: Евгений Платов
→ Ссылка
forEach мутирует сам массив и возвращает undefined
const arr = [{ name: "John" }, { name: "Koul" }];
const addNew = (arr) => {
const copyArr = [...arr];
copyArr.forEach(el => {
el["age"] = "23";
});
return copyArr;
};
console.log(addNew(arr), "res");
Автор решения: Anna
→ Ссылка
const hhh = [{ name: "John" }, { name: "Koul" }];
const addField = (arr) => {
const copyArr = [...arr];
const result = copyArr.map((el) => {
el["type"] = "adult";
return el;
});
return result;
};
console.log(addField(hhh), "res");
Автор решения: KABAN
→ Ссылка
const arr = [{
name: "John"
}, {
name: "Koul"
}];
const addNew = (arr) => {
const copyArr = [...arr];
let res = [];
copyArr.map((el) => {
el["age"] = "23";
res.push(el)
});
return res;
};
console.log(addNew(arr), "res");
Автор решения: vsemozhebuty
→ Ссылка
Насколько я понимаю, в новом объекте вам нужна копия, так чтобы старый объект не менялся. Ошибку вам объяснили в других ответах и предложили решение. Однако есть один нюанс. К сожалению, вам мало скопировать набор объектов в новый массив, поскольку сами объекты в новом и старом массиве будут одними и теми же и будут меняться синхронно:
const arr = [{ name: "John" }, { name: "Koul" }];
const addNew = (arr) => {
return [...arr].map(el => { el["age"] = "23"; return el; });
};
console.log(addNew(arr));
console.log(arr);
// [ { name: 'John', age: '23' }, { name: 'Koul', age: '23' } ]
// [ { name: 'John', age: '23' }, { name: 'Koul', age: '23' } ]
Для полноценной копии вам нужно также создать копии объектов. Например, такими двумя способами:
const arr = [{ name: "John" }, { name: "Koul" }];
const addNew1 = (arr) => {
return arr.map(el => ({ ...el, age: '23' }));
};
const addNew2 = (arr) => {
return arr.map(el => Object.assign({}, el, { age: '24' }));
};
console.log(addNew1(arr));
console.log(addNew2(arr));
console.log(arr);
// [ { name: 'John', age: '23' }, { name: 'Koul', age: '23' } ]
// [ { name: 'John', age: '24' }, { name: 'Koul', age: '24' } ]
// [ { name: 'John' }, { name: 'Koul' } ]