【问题标题】:Change two-dimentional array's certain index value javascript更改二维数组的某些索引值javascript
【发布时间】:2022-01-20 00:56:39
【问题描述】:

我正在尝试将某个值放入某个二维数组中,但它的附加值不同。

这是我的代码。

const arr = []
const tdArr = []

arr.length = 5
arr.fill('p', 0)

for(let i = 0; i < arr.length; i++){
  tdArr.push(arr)
}

const makeRnd = (min, max) => {
  min = Math.ceil(min)
  max = Math.floor(max)
  return Math.floor(Math.random() * (max - min)) + min
}

let firstRnd = makeRnd(0, 4)
let secRnd = makeRnd(0, 4)
let tdArr2 = [...tdArr]
tdArr2[firstRnd][secRnd] = 'q'

console.log(tdArr2)

我不知道为什么不(例如)tdArr2[0][1] 没有改变,但也改变了数组的所有第二个值。

这似乎很容易,但不能谷歌它:( 感谢您的帮助!

【问题讨论】:

  • 您正在使用对同一数组的引用填充数组。
  • for 循环内创建嵌套数组,而不是在循环之前一次。

标签: javascript arrays multidimensional-array


【解决方案1】:

在 for 循环中使用 tdArr.push([...arr]) 而不是 tdArr.push(arr)

const arr = []
const tdArr = []

arr.length = 5
arr.fill('p', 0)

for(let i = 0; i < arr.length; i++){
  tdArr.push([...arr])
}

const makeRnd = (min, max) => {
  min = Math.ceil(min)
  max = Math.floor(max)
  return Math.floor(Math.random() * (max - min)) + min
}

let firstRnd = makeRnd(0, 4)
let secRnd = makeRnd(0, 4)
let tdArr2 = [...tdArr]
tdArr2[firstRnd][secRnd] = 'q'

console.log(tdArr2)

【讨论】:

    【解决方案2】:

    正如@Dave Newton 所提到的,tdArr 数组的每个元素都是同一个元素,它是对 arr 的引用,因此当您更改 arr 的值时,tdArr 的所有元素都会发生变化,因为它们都引用了同一个数组。

    我会推送一个数组文字而不是创建一个数组,然后推送它或创建一个副本,如上面答案中提到的那样,并在每次迭代时推送副本。

    tdArr.push(['p']);
    

    【讨论】:

      猜你喜欢
      • 2018-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-16
      • 2023-03-30
      • 2021-10-31
      • 1970-01-01
      • 2016-09-19
      相关资源
      最近更新 更多