代码之家  ›  专栏  ›  技术社区  ›  Demodave

如何在数组中设置被推对象的属性?[副本]

  •  0
  • Demodave  · 技术社区  · 6 年前

    我有个东西。

    {
        "header": [{        
            "items": []
        }]
    }
    
    var jObj = jQuery.parseJSON('{"header":[{"items":[]}]}');
    

    我把一个物体推到物品上

    var align = jQuery.parseJSON('{"align":""}');
    jObj["header"][0].items.push(align);
    jObj["header"][0].items.push(align);
    

    我设定值

    jObj["header"][0].items[0].align = "right";
    jObj["header"][0].items[1].align = "left";
    
    console.log(JSON.stringify(jObj));
    

    两条路线的值都相同,如何设置这些值?

    输出

    {“header”:[{“items”:[{“align”:“left”},{“align”:“left”}]}

    这似乎有效,但我需要它的动力。

    var jObj = jQuery.parseJSON('{"header":[{"items":[{"align":""},{"align":""}]}]}');
    
    2 回复  |  直到 6 年前
        1
  •  0
  •   Ashish Ranjan    6 年前

    因为 align 是相同的对象,当您设置 property 对齐它们会被覆盖。。

    jObj["header"][0].items.push(align);
    jObj["header"][0].items.push({...align});
    
        2
  •  2
  •   Luis felipe De jesus Munoz    6 年前

    你在推一个推荐人。。。任何一种变化都反映在另一种变化中。尝试 Object.assign({}, align) 相反。它将创建一个没有对象引用的副本。

    var jObj = {
        "header": [{        
            "items": []
        }]
    }
    
    var align = {"align": ""};
    jObj["header"][0].items.push(Object.assign({}, align));
    jObj["header"][0].items.push(Object.assign({}, align));
    
    jObj["header"][0].items[0].align = "right";
    jObj["header"][0].items[1].align = "left";
    
    console.log(jObj);

    Js把json当作数组,所以不需要解析。