Как обновить объект данными из другого объекта, вложенного в массив?

#javascript #arrays #object

#javascript #массивы #объект

Вопрос:

Итак, мне нужно написать функцию, которая обновляет мой объект другим объектом (но этот объект находится внутри массива), например:

   const mazda = { model: 5, seria: 22, wheels: 4,};
 

и я хочу добавить данные из :

 const newItems= [{ LCDscreen: true },{ wheels: 5 },{ model: 6},{ weight: 500},{ mirrors: 4},];
 

но таким образом, серия из 1-го объекта остается неизменной. Результат должен быть

 { seria: 22 ,model: 6, wheels: 4, LCDscreen: true, weight: 500 , mirrors: 4};
 

Каков наилучший подход?

Комментарии:

1. Можете ли вы показать, каким должен быть результат?

2. вы хотите изменить существующие значения или добавить к ним дополнительные?

3. const mazda = { серия: 22 , модель: 6, колеса: 4, ЖК-экран: true, вес: 500, зеркала: 4};

4. Я хочу добавить значения из второго объекта в первый, не меняя seria.

5. Почему wheels: 4 не обновляется с 5 помощью в выходных данных?

Ответ №1:

Вы можете просто перебирать массив и распространять объекты массива внутри объекта mazda. Это самый быстрый метод после использования цикла for .

 let mazda = { model: 5, seria: 22, wheels: 4,};

const newItems= [{ LCDscreen: true },{ wheels: 5 },{ model: 6},{ weight: 500},{ mirrors: 4}]

newItems.forEach(item => {
      mazda = {...mazda, ...item};
});

console.log(mazda) 

Комментарии:

1. Вы используете синтаксис распространения , а не деструктурирование

2. Извините, я виноват. Спасибо за обновление.

Ответ №2:

Это можно сделать в одной строке:

 newItems.reduce((acc, patch) => Object.assign(acc, patch), mazda)
 

Это перебирает все объекты в newItems списке и объединяет их в mazda один за другим.

Если вы не хотите mazda , чтобы объект изменялся, а вместо этого получали новый объект, используйте пустой object ( {} ) в качестве первого параметра для Object.assign :

 const newMazda = newItems.reduce((acc, patch) => Object.assign({}, acc, patch), mazda)
 

Ответ №3:

Я думаю, это делает то, что вы хотите. Возьмите каждый элемент в newList и добавьте его как новое свойство к mazda объекту.

 const mazda = { model: 5, seria: 22, wheels: 4,};

const newItems= [{ LCDscreen: true },{ wheels: 5 },{ model: 6},{ weight: 500},{ mirrors: 4}]

const result = newItems.reduce( (acc,item) => ({...acc,...item}),mazda);

console.log(result) 

Комментарии:

1. можете ли вы объяснить , в чем заключается польза ... ?

2. @SandrinJoy Да, конечно, это синтаксис распространения