-1

我有一小部分数据,我想检查我正在检查的值是否一起存在于数组中。

这就是我的 console.log(astar); 中数据的样子;

http://i.imgur.com/PqzG7.jpg

我的尝试是:

 console.log(astar); // display array info
     for (i=0; i < 50; i++){    
        for (j=0; j < 50; j++){ 
        if( i in astar && j in astar[i] ){
               abposx = getx(i);
               abposy = gety(j);
        ctx.fillStyle = "#000";
        ctx.fillRect (abposx,abposy,10,10);             
    }   

这个想法是具有[0] [1]位置的“内部数组”,我试图查看它们中的“任何”是否具有[0] == i和[1] == j,如果so = true。

我应该如何改变它以正确和最有效地工作 - 以便在数组中找到它时会绘制

4

2 回答 2

2

你目前正在做的相当于

for (i=0; i < astar.length; i++)
    for (j=0; j < astar[i].length; j++) {
        abposx = getx(i);
        abposy = gety(j);
        ctx.fillStyle = "#000";
        ctx.fillRect(abposx,abposy,10,10);
    }

您可能想要:

for (i=0; i < astar.length; i++) {
    if (astar[i][0] > 50 || astar[i][1] > 50)
        continue;
    abposx = getx(astar[i][0]);
    abposy = gety(astar[i][1]);
    ctx.fillStyle = "#000";
    ctx.fillRect(abposx,abposy,10,10);
}

循环遍历所有坐标非常低效,需要第三个循环才能在 astar 中搜索。更好地循环通过 astar 并绘制你能得到的东西。

正确的三循环代码应该是:

for (i=0; i < 50; i++)
    for (j=0; j < 50; j++)
        if (astar.some(function(item) {
            return item[0] == i && item[1] == j;
        }) {
            abposx = getx(i);
            abposy = gety(j);
            ctx.fillStyle = "#000";
            ctx.fillRect(abposx,abposy,10,10);
        }

some()循环遍历数组,如果项目与条件函数匹配则返回 true。它等于bfavaretto 发布的扩展版本)。导致 O(n^2.5) 的性能......

于 2012-04-19T00:01:45.590 回答
1

目前尚不清楚您要与数组值比较什么。你所拥有的是一个包含其他数组的数组,每个数组里面只有两个项目。你可以像这样循环它:

for(var i=0; i<astar.length; i++) {
    console.log("Array " + i + " contains values " + astar[i][0] + " and " + astar[i][1]);
}

更新

我仍然不确定我明白了,但你可能正在寻找这个:

for (i=0; i < 50; i++){    
    for (j=0; j < 50; j++){ 
         for(var k=0; k<astar.length; k++) {
              if(astar[k][0] == i && astar[k][1] == j) {
                    abposx = getx(i);
                    abposy = gety(j);
                    ctx.fillStyle = "#000";
                    ctx.fillRect (abposx,abposy,10,10);
                }
          }
     }
} 
于 2012-04-18T23:59:13.797 回答