为什么要在javascript中覆盖2D数组的元素

时间:2016-05-11 06:17:29

标签: javascript multidimensional-array

我有一个2D阵列" allcolor"在javascript中。因此,我使用与代码相同的1D数组初始化它的每一行。

var allcolor=[];
var color=["#f73214","#f5f714","#54f714","#141df7","#006400","#556B2F","#2F4F4F",
           "#808080","#8FBC8F","#4B0082","#9400D3","#483D8B","#1E90FF","#00BFFF", 
           "#FFFF00","#ADFF2F","#9932CC","#FF69B4","#FF1493","#8B0000","#8B4513",
           "#B22222","#CD5C5C","#E9967A","#FF8C00","#DAA520","#F0E68C","#FFFAF0",
           "#000000"];

for(p=0;p<x.length;p++){
    allcolor[p]=color;
}

当我更改allcolor的每一行的每个元素时,覆盖allcolor所有行的其他元素。当我运行这个波纹管代码时,我看到所有[..] [0]和所有[..] [4]都是相同的值&#39;#000000&#39;和#ffffff&#39;。

console.log(allcolor);
allcolor[0][0]='#000000';
console.log(allcolor);
allcolor[0][4]='#ffffff';
console.log(allcolor);

如何更改一行的值?

1 个答案:

答案 0 :(得分:0)

所以,这种情况发生了,因为javascript变量只存储对象所属的内存位置的引用(类似于C ++中的指针)。当你在allcolor数组中放置4次颜色时,它们将引用同一个对象,因此如果你改变一行的值,你就会改变每一行的值。

为避免这种情况,请执行

allcolor[p]=color.slice();