在特定索引处检查数组中的值?

时间:2013-12-30 00:05:05

标签: javascript arrays

我遇到了一些麻烦......

基本上我有这个存储瓷砖的数组(2维)(基本div有颜色等...),可以通过这样做来改变特定瓷砖的属性;

world[x][y].style blabla somehting

现在,我开始做一些寻路,以便能够在这些瓷砖上走动,假设我有一个10x10的瓷砖网格,范围从-5到-5到5,5(坐标)

我正坐在-5,-5瓦片上,我点击某处“开始寻路”,我的寻路事物基本上只找到8个相邻的瓦片并返回它们,然后我选择一个让我更接近的瓦片我做了X次,直到达到目标。

如果我站在中间(0,0)并尝试去某个地方,这没有问题,但由于我在我的“世界”的角落,我在搜索相邻的瓷砖时会遇到一些问题; < / p>

- #o o o o -

- o o o o o -

- o o o o o -

- o o o o o -

- o o o o o -

让我们说这是我的世界,#是角色,o是空的瓷砖 - 只是一个空的深渊(我不能去的地方)

现在我要去X;

- #o o o o -

- o o o o o -

- o o X o o -

- o o o o o -

- o o o o o -

所以我开始我的小寻路算法但是当它从我所在的位置搜索相邻的平铺时,它会返回一个错误,因为没有平铺,左+下,左+上或上(从我的位置。

- #+ o o o -

- + + o o o -

- o o o o o -

- o o o o o -

- o o o o o -

(+)是可用的图块,但它会尝试在我周围搜索更多图块,这会导致错误。

我试图通过使用来删除不存在的图块;

if (world[x][y] !== null) {}
if (world[x][y] != null) {}
if (world[x][y] !== 'undefined') {}
if (world[x][y] != 'undefined') {}
if (!world[x][y]) {}

但是然后错误是在if语句而不是实际的“tile返回”...

那么,我如何预先检查数组中某个特定索引(或2个特定索引)的内容是否存在?

另请注意,我的阵列确实有一些空白,因为我的世界不仅仅是可以走路的瓷砖。

4 个答案:

答案 0 :(得分:2)

在检查world[x]

之前,您需要在world[x][y]验证行/列
if (!world[x] || !world[x][y]) {
    // Tile does not exist
}else{
    // Tile exists
}

答案 1 :(得分:0)

如果您在控制台中单独输入此行:

console.log(typeof x); //output: undefined

没有定义任何名为'x'的元素,该语句将评估为'undefined'。

然后您可以在if ... else语句中使用 typeof 来检查未定义的类型(这将是尚不存在的类型。)

答案 2 :(得分:0)

解决这个问题的一个有效方法是在所有外部瓷砖中使用空深渊标记使世界变得更宽(12x12而不是10x10)。现在,角色永远不会测试未定义的瓷砖,你的算法也能正常工作。

答案 3 :(得分:0)

我建议您在询问“瓷砖”之前检查指数(x和y)。如果你能负担得起要求瓦片返回一个小算法,检查哪些方向可以有一个瓦片要返回似乎不是很难。

作为一个建议,你可以编写一个函数来返回实际的“邻近/相邻”磁贴_using_the_index_values_,同时考虑到没有瓦片“左”为-5或“右边+5”等。

这意味着并非所有“相邻瓷砖”阵列都具有相同数量的瓷砖,但您可以轻松地操纵,遍历,知道长度(等)和数组。

如果我有更多关于“寻路算法”的细节,我可能会编写示例代码。 (希望它有所帮助。)