我需要合并两个javascript对象并将其设置为我的全局对象。我使用 " Object.assign" 方法,但它无法正常工作。它在第一次调用时正常工作。但我需要每次将新对象合并到全局对象。但它不是第一次工作,它使我的全局与最后一个对象相同。你知道其他任何方法吗?提前致谢:/
Javscript代码:
//global object
Admin.bufferCreateJSON={};
Admin.createBufferJSON=function(){
var B_name=$("#B_name").val();
var B_description=$("#B_description").val();
var B_bufferType=$("#bufferTypeSelect").val();
var bufferData={};
var common = {'name': B_name,'description': B_description};
bufferData=Object.assign(bufferData, common);
var bufferType={ 'bufferType[id]': B_bufferType}
//following codes works right
bufferData=Object.assign(bufferData, bufferType);
//Admin.bufferCreateJSON is my global variable
// But when I want to merge it to my global variable it doesnt work
Admin.bufferCreateJSON=Object.assign(Admin.bufferCreateJSON, bufferData);
//shows me just last one
console.log(Admin.bufferCreateJSON);
}
答案 0 :(得分:0)
let mergedObj = Object.assign({}, obj1, obj2, obj3);
是最好的方式。
你案件的片段:
var Admin = {
bufferCreateJSON: {
a: 123,
b: 321,
}
}
Admin.createBufferJSON=function(tmp){
var B_name = 'B_name' + tmp; //$("#B_name").val();
var B_description = 'B_description' + tmp; //$("#B_description").val();
var B_bufferType = 'B_bufferType' + tmp; //$("#bufferTypeSelect").val();
var common = {'name': B_name,'description': B_description};
var bufferData=Object.assign({}, common);
var bufferType={ 'bufferType[id]': B_bufferType}
bufferData=Object.assign({}, bufferData, bufferType);
Admin.bufferCreateJSON=Object.assign({}, Admin.bufferCreateJSON, bufferData);
console.log(Admin.bufferCreateJSON);
}
Admin.createBufferJSON(1)
Admin.createBufferJSON(2)
控制台输出:
Object {a: 123, b: 321, name: "B_name1", description: "B_description1", bufferType[id]: "B_bufferType1"}
Object {a: 123, b: 321, name: "B_name2", description: "B_description2", bufferType[id]: "B_bufferType2"}
对象包含来自全局对象的a
和b
,name
,description
,bufferType[id]
将按预期替换。
如果您只想添加新属性而不替换存在属性,则可以更改分配顺序:
Admin.bufferCreateJSON=Object.assign({}, bufferData, Admin.bufferCreateJSON);