Eri*_*eld 7 javascript arrays loops for-loop
请向我解释一下.我正在尝试使用for循环创建一个数组数组.当它不起作用时,我尝试简化代码以了解Javascript正在做什么,但简单的代码也没有意义.
function test(){
var sub_array = [];
var super_array =[];
for (var i=1;i<=3;i++){
sub_array.push(i);
super_array.push(sub_array);
}
alert(super_array);
}
Run Code Online (Sandbox Code Playgroud)
我希望看到[1; 1,2; 1,2,3].取而代之的是[1,2,3; 1,2,3; 1,2,3].如果我循环0-2并按索引分配,我会得到相同的现象.
Fré*_*idi 16
您总是将对同一数组的引用推送到超级数组中.
要解决该问题,可以在推送之前使用slice()克隆子数组:
function test() {
var sub_array = [];
var super_array = [];
for (var i = 1; i <= 3; i++) {
sub_array.push(i);
super_array.push(sub_array.slice(0));
}
alert(super_array);
}
Run Code Online (Sandbox Code Playgroud)
编辑:正如Dan D.在下面指出的那样,你也可以不用参数调用concat()而不是slice(0).根据这篇文章它更快(我没有自己衡量):
for (var i = 1; i <= 3; i++) {
sub_array.push(i);
super_array.push(sub_array.concat());
}
Run Code Online (Sandbox Code Playgroud)
当您按下"sub_array"时,您不会推送它的副本.您最终在"super_array"中使用相同的数组三次.(我应该说你正在推动对同一阵列的引用三次.)
你可以这样做:
// ...
super_array.push(sub_array.slice(0));
Run Code Online (Sandbox Code Playgroud)
制作副本.
| 归档时间: |
|
| 查看次数: |
58311 次 |
| 最近记录: |