改变二维数组的某个索引值javascript
Change two-dimentional array's certain index value javascript
我试图在某个二维数组中放入某个值,但它附加了不同的值。
这是我的代码。
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]
不改变但也改变数组的所有第二个值。
这看起来很容易,但做不到 google :(
感谢您的帮助!
如@Dave Newton 所述,tdArr
数组的每个元素都是对 arr
的引用,因此当您更改 arr
的值时,tdArr
是变化,因为它们都引用同一个数组。
我会推送一个数组文字而不是创建一个数组,然后推送它或创建一个副本,就像上面的答案中提到的那样,并在每次迭代时推送副本。
tdArr.push(['p']);
在 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)
我试图在某个二维数组中放入某个值,但它附加了不同的值。
这是我的代码。
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]
不改变但也改变数组的所有第二个值。
这看起来很容易,但做不到 google :( 感谢您的帮助!
如@Dave Newton 所述,tdArr
数组的每个元素都是对 arr
的引用,因此当您更改 arr
的值时,tdArr
是变化,因为它们都引用同一个数组。
我会推送一个数组文字而不是创建一个数组,然后推送它或创建一个副本,就像上面的答案中提到的那样,并在每次迭代时推送副本。
tdArr.push(['p']);
在 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)