亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

javascript按鍵名合并兩個對象

javascript按鍵名合并兩個對象

青春有我 2021-11-04 15:39:41
假設我有以下兩個對象:var a = {  "abc": {    "111": {       name: "jon"    }  },  "xyz": {    "222": {       name: "bill"    }  }}var b = {  "xyz": {    "333": {       name: "mary"    }  }}然后我想創建一個新對象以通過頂級鍵名合并兩者。所以要得到這樣的東西:var c = {  "abc": {    "111": {       name: "jon"    }  },  "xyz": {    "222": {       name: "bill"    },    "333": {       name: "mary"    }  }}我想這可能是你用.map(), .each(), 或.reduce()? 在這種情況下,jQuery 會有所幫助嗎?如果是這樣怎么辦?
查看完整描述

3 回答

?
慕容3067478

TA貢獻1773條經驗 獲得超3個贊

您可以簡單地使用Object.entries()Array.reduce()

主要思想是遍歷兩個數組并維護一個映射。

  • 迭代第一個對象并創建其所有屬性的映射。

  • 然后迭代第二個對象,并檢查它的每個屬性是否存在于地圖中,如果存在則合并兩者,如果不存在則簡單地添加它。

var a = { "abc": { "111": { name: "jon" } }, "xyz": { "222": { name: "bill" } } }

var b = { "xyz": { "333": { name: "mary" } } };


let result = Object.entries(a).reduce((acc,[key, value]) => (acc[key] = value,acc),{});

Object.entries(b).reduce((acc,[key, value]) => (acc[key] =acc[key] && Object.assign(acc[key], value)|| value,acc),result);


console.log(result);

如果您可以使用現有對象之一,那么簡單的解決方案可以是:


var a = { "abc": { "111": { name: "jon" } }, "xyz": { "222": { name: "bill" } } }

var b = { "xyz": { "333": { name: "mary" } } };


Object.entries(a).forEach(([key, value])=>{

  b[key] = Object.assign(b[key] || {}, value);

});


console.log(b);


查看完整回答
反對 回復 2021-11-04
?
天涯盡頭無女友

TA貢獻1831條經驗 獲得超9個贊

如果您已經在項目中使用 jQuery 或 Lodash,則可以分別使用$.extend或_.merge。當您已經在使用這些庫之一時,無需重新發明輪子。


var a = { "abc": { "111": { name: "jon" } }, "xyz": { "222": { name: "bill" } } };

var b = { "xyz": { "333": { name: "mary" } } };


console.log($.extend(true, {}, a, b));

console.log(_.merge({}, a, b));

console.log("a =", a);

console.log("b =", b);

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js"></script>



查看完整回答
反對 回復 2021-11-04
?
一只甜甜圈

TA貢獻1836條經驗 獲得超5個贊

你能使用es6對象解構嗎?


var a = {

  "abc": {

    "111": {

       name: "jon"

    }

  },

  "xyz": {

    "222": {

       name: "bill"

    }

  }

}


var b = {

  "xyz": {

    "333": {

       name: "mary"

    }

  }

}


   const c = {abc: a.abc, xyz: [a.xyz, b.xyz]};

    console.log(c);


查看完整回答
反對 回復 2021-11-04
  • 3 回答
  • 0 關注
  • 188 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號