修改数组中数组的元素



我想修改第50行的值,默认值为-1

let rowUp = table.pos[51]
for (let i in rowUp){
process.stdout.write(rowUp[i].val+'')
}
process.stdout.write('n')
let rowSet = table.pos[50]
for (let i in rowSet){
rowSet[i].val = 0
process.stdout.write(rowSet[i].val+'')
}
process.stdout.write('n')
let rowDn = table.pos[49]
for (let i in rowDn){
process.stdout.write(rowDn[i].val+'')
}

结果是

-1-1-1-1-1-1-1-11-1-1-1

0000000000

0000000000

我希望它是

-1-1-1-1-1-1-1-11-1-1-1

0000000000

-1-1-1-1-1-1-1-11-1-1-1

编辑

我在这里看到了我的错误

const cellData = await new cellSchema()
for (let posZ = 0; posZ < 100; posZ++) {
let row = []
for (let posX = 0; posX < 100; posX++) {
row[posX] = cellData
}
table.pos[posZ] = row
}

它需要

for (let posZ = 0; posZ < 100; posZ++) {
let row = []
for (let posX = 0; posX < 100; posX++){
const cellData = await new cellSchema()
row[posX] = cellData
}
table.pos[posZ] = row
}

我怀疑行中的节点都是对同一对象的引用。因此,当您更改其中一个的val属性时,它将更改所有这些属性。

要以正确的方式解决此问题,您需要确保在创建表时为每个节点创建副本。

为了在代码片段的情况下以一种巧妙的方式解决这个问题,以下是您可以做的:

let rowUp = table.pos[51]
for (let i in rowUp){
process.stdout.write(rowUp[i].val+'')
}
process.stdout.write('n')
let rowSet = table.pos[50]
for (let i in rowSet){
rowSet[i] = { …rowSet[i], val: 0 }
process.stdout.write(rowSet[i].val+'')
}
process.stdout.write('n')
let rowDn = table.pos[49]
for (let i in rowDn){
process.stdout.write(rowDn[i].val+'')
}

当您需要偏离表中常用的引用对象时,这将创建一个副本。

相关内容

  • 没有找到相关文章

最新更新