Javascript每次合并两个对象并设置为全局对象

时间:2017-04-25 06:30:28

标签: javascript jquery object javascript-objects

我需要合并两个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);

    }

1 个答案:

答案 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"}

对象包含来自全局对象的abnamedescriptionbufferType[id]将按预期替换。

如果您只想添加新属性而不替换存在属性,则可以更改分配顺序:

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