【问题标题】:Javascript filling array using for loop使用for循环的Javascript填充数组
【发布时间】:2015-01-09 18:04:46
【问题描述】:

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

【问题讨论】:

  • 您没有按值引用y
  • y 始终是同一个引用
  • 来自 NewBe 感谢所有出色的答案。将更深入地研究引用和传递值。

标签: javascript arrays multidimensional-array


【解决方案1】:

这是一个人为的例子吗?因为您在每次迭代中将y 分配给x 的引用类型,并在每一步修改y(但所有x[]s 都指向相同的y)你得到相同的数字.而不是使用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(我认为您希望您的代码这样做)

【讨论】:

    【解决方案2】:

    正如我在 cmets 中提到的,您正在将数组的索引设置为数组。它没有存储该数组的值。

    您要么需要在每次迭代时创建一个新数组,要么需要克隆它。

    新数组:

    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);

    【讨论】:

      【解决方案3】:

      如果需要保留 y,还有另一种方法:

      for(i = 0; i < 10; i++){
        y[0] = (i);
        y[1] = (i + 1);
        x[i] = [y[0], y[1]];
      }
      

      【讨论】:

        猜你喜欢
        • 2014-04-09
        • 2013-03-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-21
        • 2011-09-14
        相关资源
        最近更新 更多