我有一个 JavaScript 代码,它有 4 个 3 维数组,每个数组的维度为 500x500x220(最后一个维度中的所有 220 个值很少全部使用)。由于这个维度很大,像这样定义一个数组,然后从那个数组中定义四个数组要快得多。问题是,当我更改一个数组中的值时,它也会更改其他数组。这是我的代码:
<script type="text/javascript">
var content = new Array();
var signs = new Array();
var sens = new Array();
var props = new Array();
var ini = new Array();
for(i = 0; i < 500; i++){
ini[i] = new Array();
for(j = 0; j < 500; j++){
ini[i][j] = new Array();
}
}
content = ini;
signs = ini;
sens = ini;
props = ini;
function f(){
alert(signs[3][3][2]); //Returns undefined
content[3][3][2] = 2;
alert(signs[3][3][2]); //Returns 2
}
f();
</script>
Run Code Online (Sandbox Code Playgroud)
请注意,该f()函数只应该更改content数组,但它也会更改signs数组。为什么会这样,我该如何解决?
如果它有所作为,我正在使用 HTA。
在这篇关于复制嵌套数组的文章的帮助下。
你的代码:
content = ini;
signs = ini;
sens = ini;
props = ini;
Run Code Online (Sandbox Code Playgroud)
使数组指向ini. 这就是为什么任何对 的引用content[0],例如,也是对signs[0]和的引用ini[0]。
使用:
function copy(arr){
var new_arr = arr.slice(0);
for(var i = new_arr.length; i--;)
if(new_arr[i] instanceof Array)
new_arr[i] = copy(new_arr[i]);
return new_arr;
}
Run Code Online (Sandbox Code Playgroud)
复制数组:
content = copy(ini);
signs = copy(ini);
sens = copy(ini);
props = copy(ini);
Run Code Online (Sandbox Code Playgroud)