我知道很多次都会问这个问题,但我该如何解决这个问题呢?
我有一个map [] []数组(包含游戏的tile id),我需要将它复制到pathmap [] []数组(只包含0和1,它是路径图),但是当我这样做时. .
function updatepathmap(){
pathmap = [];
var upm_x = 0;
while (upm_x < map.length){
var upm_y = 0;
while (upm_y < map[upm_x].length){
pathmap[][]
if (canPassthrough(map[upm_x][upm_y])) {
pathmap[upm_x][upm_y] = 1;
} else {
console.log(upm_x);
console.log(upm_y);
pathmap[upm_x][upm_y] = 0;
}
upm_y++;
}
upm_x++;
}
console.log(map);
console.log(pathmap);
}
Run Code Online (Sandbox Code Playgroud)
..在线给我类型Cannot set property '0' of undefined错误pathmap[upm_x][upm_y] = 0;
尽管有foo[0][0]语法糖,但多维数组并不存在.您只需在其他数组中包含数组.一个结果是您无法在同一表达式中构建数组:
> var foo = [];
undefined
> foo[0][0] = true;
TypeError: Cannot set property '0' of undefined
Run Code Online (Sandbox Code Playgroud)
您需要先创建父数组:
> var foo = [];
undefined
> foo[0] = [];
[]
> foo[0][0] = true;
true
Run Code Online (Sandbox Code Playgroud)
您可以使用常规技术确定它是否存在,例如:
> var foo = [];
undefined
> typeof foo[0]==="undefined"
true
> foo[0] = true;
true
> typeof foo[0]==="undefined"
false
Run Code Online (Sandbox Code Playgroud)
我原以为pathmap[][]是一个语法错误,我很惊讶你没有看到一个.
在使用数组之前pathmap[upm_x],必须在pathmap[upm_x]以下位置创建数组:
pathmap[upm_x] = [];
Run Code Online (Sandbox Code Playgroud)
这将是你外围的第一行while,所以:
while (upm_x < map.length){
pathmap[upm_x] = [];
// ...
Run Code Online (Sandbox Code Playgroud)
请记住,JavaScript没有2D数组.它有数组数组.pathmap = []创建外部数组,但不在其中创建任何数组.
边注:
var upm_x = 0;
while (upm_x < map.length){
// ...
upm_x++;
}
Run Code Online (Sandbox Code Playgroud)
是一种容易出错的写作方式:
for (var upm_x = 0; upm_x < map.length; upm_x++){
// ...
}
Run Code Online (Sandbox Code Playgroud)
如果您使用while,并且您有任何理由使用continue或者您有多个if分支,则很容易忘记更新循环变量.由于循环的控制变量是什么for是对,最好使用正确的构建工作.
附注2:
你的代码正在成为Implicit Globals的恐怖的牺牲品,因为你没有声明pathmap.也许你是故意这样做的,但我不推荐它.声明你的变量,如果你需要它在你的函数之外,让你的函数返回它.
附注3:
map 会使这段代码更简单:
function updatepathmap(){
var pathmap = map.map(function(outerEntry) {
return outerEntry.map(function(innerEntry) {
return canPassthrough(innerEntry) ? 1 : 0;
});
});
console.log(map);
console.log(pathmap);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
819 次 |
| 最近记录: |