【问题标题】:add object in nested object在嵌套对象中添加对象
【发布时间】:2017-01-08 04:51:38
【问题描述】:

我想在大对象中添加一个小对象。我有一个位置元素。我想在那个位置添加小对象。但如果该位置已经有一些物体,则将小物体放置在同一水平面上。

var object = { 'mcq': { 'options1': { 'image': { 'contact': {}}}, 'options2': {}, 'options3': {}}};

var position = "mcq.options1.image";
var add_element = {"number": {}};

//   output should be like this :
var object = { 'mcq': { 'options1': { 'image': { 'contact': {}, 'number': {}}}, 'options2': {}, 'options3': {}}};

【问题讨论】:

    标签: javascript jquery object


    【解决方案1】:

    试试这样...

    <script>
    var object = { 'mcq': { 'options1': { 'image': { 'contact': {}}}, 'options2': {}, 'options3': {}}};
    
    var position = "mcq.options1.image";
    var add_element = {"number": {}};
    console.log(object);
    //output should be like this:
    object.mcq.options1.image.new = add_element;
    console.log(object);
    
    </script>
    

    小提琴...http://www.w3schools.com/code/tryit.asp?filename=FBJ62BGIT3E9 看这里

    【讨论】:

    • OP 需要遍历的路径是动态的
    【解决方案2】:

    评论中问题的更新答案

    // Recursive function to traverse the object and set key and value of the new object param passed
    function setValue(obj,path,add_element){
        if (typeof(path)=='string'){
            path = path.split('.');
        }
        if (path.length > 1){
            setValue(obj[path.shift()], path, add_element);
        }else{
            obj[path[0]][Object.keys(add_element)[0]] = add_element[Object.keys(add_element)[0]];
        }
    }
    
    var object = { 'mcq': { 'options1': { 'image': { 'contact': {}}}, 'options2': {}, 'options3': {}}};
    var position = "mcq.options1.image";
    var add_element = {"number": {}};
    
    setValue(object, position, add_element);
    
    console.log(object);

    上一个答案

    只需将小对象添加为现有对象的新参数即可。如下添加时,如果对象键已经存在,则该值将被覆盖,如果不存在,则将添加到与新键相同的级别。

    object.mcq.options1.image.number = {};
    

    var object = { 'mcq': { 'options1': { 'image': { 'contact': {}}}, 'options2': {}, 'options3': {}}};
    
    console.log(object);
    
    object.mcq.options1.image.number = {};
    
    console.log(object);

    【讨论】:

    • 不,这不起作用,因为位置是动态的并且存储在变量中。
    • var object = { 'mcq': { 'options1': { 'image': { 'contact': {}}}, 'options2': {}, 'options3': {}} };控制台.log(对象); var position = "mcq.options1.image";对象[位置] = {}; console.log(object);
    • 请看上面的评论,在这个我的位置是动态的并存储在变量中。
    • @manishsingh,检查我更新的答案以适应动态分配
    • @manishsingh,如果答案对您有所帮助,请将答案标记为已接受。乐于助人
    猜你喜欢
    • 1970-01-01
    • 2023-01-12
    • 1970-01-01
    • 1970-01-01
    • 2018-10-12
    • 1970-01-01
    • 2021-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多