需求:將獨立的對象 jsondata 與數組 arr 合併為包含 baby 字段的巢狀對象。
var jsondata = {"name":"圖圖","provice":"340000","city":"341200","district":"341226","sex":1,"job":"01000"};
var arr = [{birth:"2016-04-07",id:"2",sex:"2"}, {birth:"2016-04-07",id:"2",sex:"2"}];
jsondata.baby = arr; // 一行完成合併
console.log(JSON.stringify(jsondata, null, 2));
/* 輸出:
{
"name": "圖圖",
"provice": "340000",
"city": "341200",
"district": "341226",
"sex": 1,
"job": "01000",
"baby": [
{"birth":"2016-04-07","id":"2","sex":"2"},
{"birth":"2016-04-07","id":"2","sex":"2"}
]
}
*/
若後續需修改 arr 但不影響 jsondata,需深拷貝:
jsondata.baby = JSON.parse(JSON.stringify(arr));
// 或使用 lodash: _.cloneDeep(arr)
// 或 ES6 結構化克隆: structuredClone(arr) (現代瀏覽器支持)
function merge(parent, childKey, childArray) {
return Object.assign({}, parent, {[childKey]: childArray});
}
var result = merge(jsondata, 'baby', arr);
JavaScript 物件屬性動態增刪極其靈活,合併數據結構往往只需一條賦值語句。