как заменить объект в массиве объектов?

371
17 июля 2017, 17:06

Есть изначально вот такая конструкция

{
  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)
            });
Answer 1

Если я ва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

Answer 2
Object.books.forEach(function(item, i, arr) {
if(item.id == "200") {
   Object.books[i] = {id: "200", ...} // Новый объект с новыми свойствами
   // Или так Object.books[i].author = "..."; и так для каждого изменяемого свойства
}
})
READ ALSO
regexp поиск по части текста [требует правки]

regexp поиск по части текста [требует правки]

День добрый! Есть кусок кода:

253
Как правильно работать со значением по умолчанию при загрузке страницы?

Как правильно работать со значением по умолчанию при загрузке страницы?

ЗдравствуйтеРешил поработать на чистом JS, и возник банальный вопрос, который не могу понять как решить:

202
Angular 4, Как получить данные из файла index.html

Angular 4, Как получить данные из файла index.html

В программу нужно передавать некоторый параметр, но передача должна осуществляться из файла indexhtml, то есть из файла на котором располагается...

271
Удаление элементов из массива в AngularJs

Удаление элементов из массива в AngularJs

Помогите решить проблему

323