あなたの2次元配列は実際にはネストされた配列です。範囲外になる可能性のある配列のレベルのみを確認する必要があります。
var n = !!grid[x][y-1]?grid[x][y-1]:false;
var s = !!grid[x][y+1]?grid[x][y+1]:false;
var e = !!grid[x-1]?grid[x-1][y]:false; // Instead of !!grid[x-1][y]
var w = !!grid[x+1]?grid[x+1][y]:false; // Instead of !!grid[x+1][y]
つまり、 を実行するとarray[x][y]
、javascript は最初に を取得し、次にその取得した配列array[x]
でインデックスを探します。[y]
あなたの場合、最初のルックアップは未定義(grid[x-1]
)であるため、ルックアップできませんgrid[x-1][y]
。最初のステップが未定義の場合、最後のステップで未定義をチェックしています。
デモ: http://jsfiddle.net/jtbowden/qWktv/
また、$(c).addClass('active')
の開始時にparse_quad_tree
単一のブロックを強調表示することができ、再帰の開始時に発生するため、隣接するブロックごとに `.addClass('active') を呼び出す必要はありません。
デモ: http://jsfiddle.net/jtbowden/qWktv/1/