Есть изначально вот такая конструкция
{
books: [
{
id: '200',
author: '4124',
name: '412',
imgUrl: 'data:image/jpeg;base64'
}
]
}
Нужно как-то пройтись по массиву объектов в свойстве books, и заменить объект в массиве тем, который проходит по id, и затем вернуть новый объект со свойством books, в котором мы заменили объект,не изменяя старый объект.
Т.е. по итогу должно вернуться новый объект
{
books: [
{
id: '200',
author: 'new author',
name: 'new name',
imgUrl: 'some img'
}
]
}
Возвращаем новый объект со свойством books, но как заменить объект и добавить в массив я что-то не знаю.
const changedItem = action.book
return Object.assign({}, state, {
books: state.books.map(item => item.id === changedItem.id ? changedItem : item)
});
Если я ваc правильно понял, то должно это вроде выглядеть так:
var object = {
books: [
{
id: '200',
author: '4124',
name: '412',
imgUrl: 'data:image/jpeg;base64'
}
]
};
function replace(object, searchID){
var replacedObject = object;
for(var i = 0;i<replacedObject.books.length;i++){
if(replacedObject.books[i].id != searchID) continue;
replacedObject.books[i].author = 'newAuthor';
return replacedObject;
}
}
alert(replace(object, 200).books[0].author);
старый объект при этом не меняется, а новый можно заносить в переменную вызовом функции у меня выводит вместо 4124 - newAuthor
Object.books.forEach(function(item, i, arr) {
if(item.id == "200") {
Object.books[i] = {id: "200", ...} // Новый объект с новыми свойствами
// Или так Object.books[i].author = "..."; и так для каждого изменяемого свойства
}
})
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники