javascript 重复对象错误

标签 javascript arrays object for-loop

所以我有一个对象数组的数组,并希望将该数组导出到另一个数组以在将来的函数中使用,但问题是在 for (对于每个数组)上,第一次运行进展顺利,但在第一次运行之后它将相同的内容添加到过去的运行中,例如,如果我有两个具有不同内容的数组并执行 for 函数,则第一个数组与第二个数组相同。

这是代码:

 var mark = [];
//defult 
var x_mark = { c_mark_desc_col:[], c_mark_col: null,  c_mark_col_image: null, 
            c_mark_action: "click", c_mark_origin:[0,0], c_mark_col_valor: false,
            c_mark_style: [null]
            //,c_cluster: cluster[0]         
};
    for (var i = 0; i < extras.marks.length; i++) {

        mark[i] = x_mark;
        if(!(extras.marks[i].mark_desc_col === "" || typeof extras.marks[i].mark_desc_col=== "undefined" || extras.marks[i].mark_desc_col=== null))
            mark[i].c_mark_desc_col = extras.marks[i].mark_desc_col;
        if(!(extras.marks[i].mark_col === "" || typeof extras.marks[i].mark_col=== "undefined" || extras.marks[i].mark_col=== null))
            mark[i].c_mark_col = extras.marks[i].mark_col;
        if(!(extras.marks[i].mark_col_image === "" || typeof extras.marks[i].mark_col_image=== "undefined" || extras.marks[i].mark_col_image=== null))
            mark[i].c_mark_col_image = extras.marks[i].mark_col_image;
        if(!(extras.marks[i].mark_action === "" || typeof extras.marks[i].mark_action=== "undefined" || extras.marks[i].mark_action=== null))
            mark[i].c_mark_action = extras.marks[i].mark_action;
        if(!(extras.marks[i].mark_origin === "" || typeof extras.marks[i].mark_origin=== "undefined" || extras.marks[i].mark_origin=== null))
            mark[i].c_mark_origin = extras.marks[i].mark_origin;
        if(!(extras.marks[i].mark_col_valor === "" || typeof extras.marks[i].mark_col_valor=== "undefined" || extras.marks[i].mark_col_valor=== null))
            mark[i].c_mark_col_valor = extras.marks[i].mark_col_valor;
        if(!(extras.marks[i].mark_style === "" || typeof extras.marks[i].mark_style=== "undefined" || extras.marks[i].mark_style=== null))
            mark[i].c_mark_style = extras.marks[i].mark_style;
    }
    alert("outside of 'for' posição 0 antes " + extras.marks[0].mark_col + "  depois " + mark[0].c_mark_col);
    alert("outside of 'for' posição 1 antes " +extras.marks[1].mark_col + "  depois " + mark[1].c_mark_col);
}

最佳答案

那是因为使用:

mark[i] = x_mark;

您正在引用数组中的 x_mark 变量,而不是将其复制/克隆为模型,因此每个更改都会引用原始对象 x_mark

尝试克隆它,而不是使用:

mark[i]=JSON.parse(JSON.stringify(x_mark));

相关:How do I correctly clone a JavaScript object?

关于javascript 重复对象错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29514181/

相关文章:

JavaScript Echo 双引号内的 Var

javascript - 如何获取 Form.Control - React Bootstrap 日期选择器的值?

ios - 无法向数组添加元素

Java 组合类正确

javascript - 进度条的 Aria 标签 - 我需要它们来显示部分标题吗

javascript - angularjs 在 html 元素上动态设置 css

c# - 如何将存储文件分配给 ByteArray?

c++ - new (float*)[] 和 new float*[] 的区别

c++ - 在类的构造函数中创建对象是否有效?

Java:遍历对象数组,方法未按我的预期工作。