У меня есть два объекта JS.

Object1 ={a:'a1',b:'b1'}

Object2 ={b:'b2',c:'c2'}

Моя цель - использовать операторы распространения для создания нового объекта с ключами Объекта 1 и значениями Объекта 2.

Используя обычный оператор слияния спреда:

newObject = {...Object1,...Object2} 

Столкновение все равно добавит все ключи и значения из объекта 2 в результирующий объект.

newObjectWithNormalSpreadoperator = {a:'a1',b:'b2',c:'c2'}

Я хотел бы создать новый объект, который имеет все ключи объекта 1 и значения объекта 2 для общих ключей.

newObjectThatIWant = {a:'a1',b:'b2'}

Есть ли способ сделать это с помощью операторов распространения?

1
NegativeFriction 29 Окт 2019 в 16:42

2 ответа

Лучший ответ

1) . Сохраняйте только общие ключи во втором объекте.

2) Затем используйте оператор распространения.

let obj1 ={a:'a1',b:'b1'};
let obj2 ={b:'b2',c:'c2'};

let obj2Shared = Object.keys(obj2).reduce((acc, currKey) => {
  if (obj1[currKey]) {
    acc[currKey] = obj2[currKey];
  }
  return acc;
}, {});

let combined = {...obj1, ...obj2Shared};

console.log(combined);
1
Nikhil 29 Окт 2019 в 13:57
let Object1 ={a:'a1',b:'b1'}
let Object2 ={b:'b2',c:'c2'}
let newObject = {};
Object.keys(Object1).forEach(key => {
  newObject[key] = typeof Object2[key] != "undefined" ? Object2[key] : Object1[key];
});

console.log(newObject)
0
Bahador Raghibizadeh 29 Окт 2019 в 14:39