我正在用Javascript编写一个简单的扫雷游戏。我有一个二维数组(称为" mineInput")来保存所有地雷的位置。我有一个单独的阵列"结果"它记录了每个细胞附近的地雷数量。
我有2个嵌套的for循环遍历每一行,每一列都在"结果"并检查每次出售' mineInput"。如果有矿井,我会用result[i][j]++;
增加矿井数量。但是我注意到整个列增加而不是只有一个单元格的奇怪行为。
这样:
[ [ 0, 0, 0 ],
[ 0, 0, 0 ],
[ 0, 0, 0 ] ]
后跟:result[i][j]++;
变为:
[ [ 0, 1, 0 ],
[ 0, 1, 0 ],
[ 0, 1, 0 ] ]
而不是:
[ [ 0, 0, 0 ],
[ 0, 1, 0 ],
[ 0, 0, 0 ] ]
这是完整的代码(请原谅多少个控制台日志)。 https://repl.it/BIYH/2
知道什么是错的吗?
答案 0 :(得分:4)
问题出现在初始化数组的代码中
var result = [];
var newRow = [];
for (var i = 0; i < rowCount; i++) {
newRow.push(0);
}
for (var i = 0; i < rowCount; i++) {
result.push(newRow);
}
您只创建了一个newRow
数组,并将其添加到result
数组中3次。所以你可以这样表现出来:
newRow == [0,0,0]
result == [newRow, newRow, newRow]
增加时,添加到newRow
数组中的一个单元格,该单元格提供
newRow == [0,1,0]
result == [newRow, newRow, newRow] therefore
result = [[0,1,0],[0,1,0],[0,1,0]]
你可以这样解决这个问题:
var result = [];
for (var i = 0; i < rowCount; i++) {
// create a new array for each row
var newRow = [];
for (var i = 0; i < rowCount; i++) {
newRow.push(0);
}
result.push(newRow);
}
答案 1 :(得分:1)
我想问题出现在以下代码中:
File "/path/to/my/script/refactor_static.py", line 92, in dynamicContent
match = re.search(comparisonRegex, crawlFileContent, re.S)
File "/usr/lib/python2.7/re.py", line 142, in search
return _compile(pattern, flags).search(string)
File "/usr/lib/python2.7/re.py", line 244, in _compile
raise error, v # invalid expression
sre_constants.error: bad character range
您将相同的数组一遍又一遍地添加到数组var result = [];
var newRow = [];
for (var i = 0; i < rowCount; i++) {
newRow.push(0);
}
for (var i = 0; i < rowCount; i++) {
result.push(newRow);
}
。相反,您想为每一行创建一个新数组:
result
数组是javascript中的对象,对象总是通过引用传递。