iT邦幫忙

0

[JS] hash應用 覆蓋 取代舊 object

假定有個a物件是:

let a = {'a':1,'b':2,'c':3}

b物件為:

lat b = {'b':4,'c':5, 'd':6};

有辦法將b覆蓋給a,且不要覆蓋掉b沒有的元素,變成:

a= {'a':1,'b':4,'c':5, 'd':6}

原始方式是可以a.a = b.a, a.b =b.b ....但這樣方式不太良好,元素一多寫個半死,有什麼比較好的解法嗎

Han iT邦新手 5 級 ‧ 2019-02-13 16:45:46 檢舉
迴圈也不用嘛??
Object.keys(b).foreach
Zaku iT邦新手 4 級 ‧ 2019-02-14 14:21:38 檢舉
可以,但call function比較好閱讀
5
Homura
iT邦高手 1 級 ‧ 2019-02-13 17:09:19
最佳解答

可以使用Object.assign()
MDN的範例

var o1 = { a: 1, b: 1, c: 1 };
var o2 = { b: 2, c: 2 };
var o3 = { c: 3 };

var obj = Object.assign({}, o1, o2, o3);
console.log(obj); // { a: 1, b: 2, c: 3 }

參考連結

看更多先前的回應...收起先前的回應...
wolfwang iT邦新手 3 級 ‧ 2019-02-13 18:07:30 檢舉

正解,實測

let a = {'a':1,'b':2,'c':3}

let b = {'b':4,'c':5, 'd':6}

b = Object.assign({},a,b)

console.log(b) //{ a: 1, b: 4, c: 5, d: 6 }

Zaku iT邦新手 4 級 ‧ 2019-02-14 10:56:30 檢舉

棒,感恩兩位大大,之前好像用過啊,記憶力衰退orz..

ddtet iT邦新手 5 級 ‧ 2019-02-15 09:29:37 檢舉

如果本身支援,或是程式有透過 babel 之類轉譯,
可以試試使用 ... 的語法展開物件。

當然… 就個人的經驗, Object.assign 是支援比較高的作法。

let a = {'a':1,'b':2,'c':3};

let b = {'b':4,'c':5, 'd':6};

b = {...a, ...b};

console.log(b); //{ a: 1, b: 4, c: 5, d: 6 }
Zaku iT邦新手 4 級 ‧ 2019-02-15 09:34:44 檢舉

感謝,也不錯,沒想到這個可以這樣用在物件。有用框架的話就不太擔心轉譯反正都要打包orz

1
浩瀚星空
iT邦大師 1 級 ‧ 2019-02-13 17:01:14

如用jquery的話。可以搭配ecah的語法應用。

要不然用foreach語法也可以達到你要的效果。

javascript我記得並沒有可直接運用這樣的處理方式。你還是要自行寫回圈處理。
大不了你就用的自已的函數就好了

Zaku iT邦新手 4 級 ‧ 2019-02-14 10:56:49 檢舉

恩恩感恩大大

1
Hank Hsiao
iT邦新手 5 級 ‧ 2019-02-13 17:09:53

Object.assign({}, a, b) 搞定

Zaku iT邦新手 4 級 ‧ 2019-02-14 10:57:29 檢舉

感恩大大

我要發表回答

立即登入回答