Saya memiliki dua objek js.

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

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

Tujuan saya adalah menggunakan operator spread untuk membuat objek baru dengan kunci Obyek 1 dan nilai Obyek 2.

Menggunakan gabungan operator spread normal:

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

Tabrakan masih akan menambahkan semua kunci dan nilai dari objek 2 ke objek yang dihasilkan.

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

Saya ingin membuat objek baru yang memiliki semua kunci objek 1, dan nilai objek 2 untuk kunci bersama.

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

Apakah ada cara untuk melakukan ini menggunakan operator spread?

1
NegativeFriction 29 Oktober 2019, 16:42

2 jawaban

Jawaban Terbaik

1) Simpan hanya kunci bersama di objek kedua.

2) Kemudian gunakan operator spread.

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 Oktober 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 Oktober 2019, 14:39