我正在尝试使用带有以下javascript程序的for循环来填充数组值。
var x = [];
var y = [];
for(i = 0; i < 10; i++){
y[0] = (i);
y[1] = (i + 1);
x[i] = y;
console.log('x[' + i + '] = ' + x[i]);
}
console.log('');
console.log('x[] =');
console.log(x);
输出是。
x[0] = 0,1
x[1] = 1,2
x[2] = 2,3
x[3] = 3,4
x[4] = 4,5
x[5] = 5,6
x[6] = 6,7
x[7] = 7,8
x[8] = 8,9
x[9] = 9,10
x[] =
[ [ 9, 10 ],
[ 9, 10 ],
[ 9, 10 ],
[ 9, 10 ],
[ 9, 10 ],
[ 9, 10 ],
[ 9, 10 ],
[ 9, 10 ],
[ 9, 10 ],
[ 9, 10 ] ]
问题是在for循环中,y [0]和y [1]数组元素基于当前索引(i)获得值,并且x [i]数组元素用当前y填充[ ]如第一个打印输出中所示。这就是我所期待的以及我希望如何填充X []。
在for循环之外,所有x [i]元素具有基于最后索引(i)值9的值,如第二打印输出中所示。我做错了什么?
答案 0 :(得分:0)
这是一个人为的例子吗?因为您在每次迭代时将y
指定为x
的引用类型,并在每一步修改y
(但所有x[]s
都指向相同的y
{1}})您获得的号码相同。而不是使用y
(假设它没有做作),你应该宁愿:
var x = [], i;
for(i = 0; i < 10; i++){
x[i] = [i, i + 1];
console.log('x[' + i + '] = ' + x[i]);
}
console.log('');
console.log('x[] =');
console.log(x);
为每次迭代构建一个新数组x
(我认为你期望你的代码能做到这一点)
答案 1 :(得分:0)
正如我在评论中提到的,您正在将数组的索引设置为数组。它不存储该数组的值。
您需要在迭代时创建一个新数组,或者需要克隆它。
新阵列:
var x = [];
for (var i = 0; i < 10; i++) {
var y = [];
y[0] = (i);
y[1] = (i + 1);
x[i] = y;
console.log('x[' + i + '] = ' + x[i]);
}
console.log('');
console.log('x[] =');
console.log(x);
<强>克隆:强>
var x = [];
var y = [];
for (var i = 0; i < 10; i++) {
y[0] = (i);
y[1] = (i + 1);
x[i] = y.slice();
console.log('x[' + i + '] = ' + x[i]);
}
console.log('');
console.log('x[] =');
console.log(x);
答案 2 :(得分:0)
另外一种方法,如果你需要保留y:
for(i = 0; i < 10; i++){
y[0] = (i);
y[1] = (i + 1);
x[i] = [y[0], y[1]];
}