我想修改第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+'')
}
当您需要偏离表中常用的引用对象时,这将创建一个副本。