2017-04-25 53 views
0

我需要合并两个JavaScript对象并将其设置为全局对象。我正在使用“Object.assign”方法,但它不起作用,它在第一次调用时正常工作。但我需要将每次新对象合并到全局对象。但它不是第一次工作,它使我的全球化与最后一个目标一样。你知道还有其他方法可以做到吗?在此先感谢:/Javascript合并两个对象并每次设置为全局对象

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

目前还不清楚要合并正是对象,但'$ .extend()'会为你做。虽然如果你的问题都是硬编码,合并是相当多余的 –

+0

[检查此链接1](https://gist.github.com/svlasov-gists/2383751)[Link2](https://plainjs.com/javascript/utilities/merge-two-javascript-objects-19 /)希望这有帮助。 – user688

回答

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对象和namedescriptionbufferType[id]如预期所取代。

,如果你只想在不更换添加新属性存在的属性,你可以改变分配顺序:

Admin.bufferCreateJSON=Object.assign({}, bufferData, Admin.bufferCreateJSON);

+0

我是这样写的Admin.bufferCreateJSON = Object.assign({},Admin.bufferCreateJSON,bufferData);而不是Admin.bufferCreateJSON = Object.assign(Admin.bufferCreateJSON,bufferData); 。但仍然console.log显示最后一个对象:/我需要合并bufferData到我的全局变量,当我打电话给我的“createBufferJSON”方法 –

+0

请告诉我'console.log('type:%s',typeof Admin.bufferCreateJSON,Admin .bufferCreateJSON)' – h0x91B

+0

type:object Object {name:“asdasd”,description:“asdasd”,bufferType [id]:“41802”} –