【问题标题】:Javascript nested loop not returns outer loop's index as expectedJavascript嵌套循环未按预期返回外部循环的索引
【发布时间】:2020-09-30 13:06:59
【问题描述】:

const a = 3
const b = 4

const arr = new Array(a).fill([]);

for (let i = 0; i < a; i++) {
  for (let j = 0; j < b; j++) {
    arr[i][j] = i;
  }
}

console.log(JSON.stringify(arr))

我希望回来

[[0,0,0,0],[1,1,1,1],[2,2,2,2]]

但它会返回

[[2,2,2,2],[2,2,2,2],[2,2,2,2]]

我认为这不是因为关闭的事情,但请让我知道这段代码没有按预期工作的问题是什么。

* 已编辑 -> 抱歉,我忘记粘贴初始化 arr 代码 *

【问题讨论】:

  • arr 定义在哪里?
  • @Phil 哦,我错过了。你会再检查一遍吗?

标签: javascript for-loop nested-loops


【解决方案1】:

不要直接在二维数组中赋值。先初始化第一个维度。

var arr = []
const a = 3
const b = 4

for(let i=0; i<a; i++){
  arr.push([])
  for(let j=0; j<b; j++){
      arr[i][j] = i;
  }
}

console.log(arr)

不要像这样初始化你的数组:

const arr = new Array(a).fill([]);

通过这样做,您传递的是引用而不是值,就像您可以使用整数一样。引用和值之间的区别很重要。

【讨论】:

  • 我确实编辑了我的代码。你能再检查一次吗?您的代码工作正常,但我不明白为什么我的代码仍然返回意外结果..
  • 我解释了你犯的错误。
  • 检查!真的很感激:)
【解决方案2】:

我发现并发布了另一个关于 Array.fill() 的问题,供其他有同样问题的人参考。

Array.fill(Array) creates copies by references not by value

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-05
    • 1970-01-01
    • 1970-01-01
    • 2020-04-16
    • 2017-08-24
    相关资源
    最近更新 更多