对象上错误的javascript重复
javascript duplicates for on object bug
所以我有一个对象数组,并希望将该数组导出到另一个数组以用于未来的函数,但问题是,在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));
相关:如何正确克隆JavaScript对象?
问题出在您的线路mark[i] = x_mark;
上。你认为这是数组的副本,但事实并非如此。它只是将mark[i]
设置为指向现有数组,当您更改它时,所有指向它的变量都会看到更改。
试试这个例子看看我的意思:
var arr = [];
var dflt = [ "abc" ];
arr[0] = dflt;
arr[1] = dflt;
document.write("<br>"+arr[0][0]);
document.write("<br>"+arr[1][0]);
arr[0][0] = "changed"; // only arr[0] is modified, but arr[1] is too
document.write("<br>"+arr[0][0]); // shows "changed" as expected
document.write("<br>"+arr[1][0]); // also shows "changed" instead of "abc"
相关文章:
- 对象上错误的javascript重复
- 我有可能防止黑客使用网络控制台用JavaScript重复调用upvote(AJAX)函数吗
- Javascript重复模式匹配,然后输出到文本区域
- Javascript重复复选框复选框
- Javascript 重复表单输入
- 通过Javascript重复更新DOM后,网页变得很慢
- 用javascript重复html元素
- Javascript重复一个函数x次
- Javascript重复天数计数器
- JavaScript 重复 ID 冲突
- 正则表达式 JavaScript 重复使用可选部分
- Javascript重复函数
- Javascript - 重复字符
- Javascript重复音频
- Javascript:重复函数不起作用
- Javascript重复事件函数
- 如何使一个正则表达式在javascript重复
- 需要帮助为JavaScript重复一个函数
- 减少javascript重复
- 用javascript重复标记或位置