使用for循环的Javascript填充数组

时间:2015-01-09 18:04:46

标签: javascript arrays multidimensional-array

我正在尝试使用带有以下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的值,如第二打印输出中所示。我做错了什么?

3 个答案:

答案 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]];
}