【问题标题】:Javascript multi-dimensional array pass locationJavascript多维数组传递位置
【发布时间】:2012-09-13 23:46:22
【问题描述】:

我正在用 Javascript 实现 A* 寻路算法的一个版本。为了保持理智,我使用了一个伪多维数组(即嵌套数组)。如果您不熟悉 A*,第一步是检查“开放”节点的周围节点。

如何传递“打开”节点的位置并检查阵列中的相邻节点?数组位置不应该是一流的吗?

function checknode (node) //Such as [5,2]
{
     if(array[node+1][node]==something) //In this case [6,2]

}

是的,我知道我可以将 x 和 y 坐标作为单独的参数传递,如下所示:

function checknode (nodex, nodey)
{
     if(array[nodex+1][nodey]==something)
}

但就我的代码而言,这具有的影响是不可取的。

编辑:基本上,我想知道是否可以将数组 (5,2) 项的位置传递到我的函数中并进行操作。

【问题讨论】:

  • 如果node = [5,2] 然后array[node+1]array[ [5,2] + 1 ] 这没有意义。你确定不是array[node[0]+1]
  • 这就是我的意思。 :) 抱歉,我无法传达我的意图。
  • 数组的长度是否相同?那为什么不 nodex + nodey*LENGTH 呢?
  • 数组是多维的。 Nodex + nodey*length 是一种可能性(事实上,我确实使用它),但本质上我的问题是数组项位置是否是一等数据。

标签: javascript algorithm multidimensional-array nodes a-star


【解决方案1】:

您可以创建一个包含两个坐标的复合值(使用对象)。这样您就可以将其作为单个参数传递:

function checknode(node) {
  if (array[node.x + 1][node.y] == something) //In this case [6,2]
}

调用示例:

checknode({ x: 5, y: 2 });

【讨论】:

    【解决方案2】:

    我不确定你到底想要什么,但看起来你正在传递一个数组。你想要类似的东西

    function checknode (node) //Such as [5,2]
    {
         if( array[ node[0]+1 ][node[1]]==something) //In this case [6,2]
    
    }
    

    所以如果 node 是一个数组,即 node = [5,2] 此代码将使用“某物”检查数组 [6][2]

    【讨论】:

    • 我知道我不是很清楚。我想看看Javascript是否以某种方式支持传递点的实际位置,所以参数“node”实际上是一个坐标,[5][2]。
    • 不,你不能那样做。如果您要比较的东西是对象(数组等)而不是原语(字符串/数字),那么您要让 === 返回 true 的唯一方法是两者都是对 SAME 对象的引用
    • so var a = [5,2](也可能是更复杂的对象或多 D 数组) var b = [,2] a === b 不会返回 true。但是,如果你写 var a = [5,2] var b = a。只有这样 === 才会返回 true。它们实际上必须是对同一个对象的引用。
    • 您建议我采取什么行动,因为我无法比较具有相同内容的两个对象?为一维数组重写整个框架真的很烦人。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 2021-04-16
    • 1970-01-01
    • 1970-01-01
    • 2013-04-17
    • 2012-10-12
    • 2018-01-08
    相关资源
    最近更新 更多