我正在试图找出如何在2D数组中找到3或匹配连续值。我想我已经找到了水平和垂直匹配,但是如果两个不同的行中存在相同的值,我将如何匹配,如下面的列表数组(myArray):
| 1 | 2 | 2 | 0 |
| - | 2 | 0 | 1 |
| 1 | - | 0 | 1 |
在这个特定的2D数组中,myArray [0] [1],myArray [0] [2]和myArray [1] [1]都匹配值2。
以下是我必须为水平和垂直匹配找到匹配项的JavaScript:
for (i in myArray) {
for (j in myArray[i]) {
if (myArray[i][j] == myArray[i][j - 1] && myArray[i][j - 1] == myArray[i][j - 2] && myArray[i][j] != "-") {
// do something
}
if (i > 1) {
if (myArray[i][j] == myArray[i - 1][j] && myArray[i - 1][j] == myArray[i - 2][j] && myArray[i][j] != "-") {
// do something
}
}
}
}
我在这里走在正确的轨道上吗?我猜我可以将两个if语句混合起来找到匹配但是我有点迷失方向。
谢谢!
答案 0 :(得分:0)
测试每个元素周围的交叉。
for (var y=0, yLen=myArray.length; y<yLen; y++){
for (var x=0, xLen=myArray[y].length; x<xLen; x++){
var matches = 0,
testing = myArray[y][x];
// test left
if (x>0 && myArray[y][x-1] === testing) matches++;
// test right
if ((x<myArray[y].length-1) && myArray[y][x+1] === testing) matches++;
// test above
if (y>0 && myArray[y-1][x] === testing) matches++;
// test below
if ((y<myArray.length-1) && myArray[y+1][x] === testing) matches++;
if (matches>=2){
console.log(y,x,' is the central or corner element of a 3-or-more group');
}
}
}
请记住,这仅对组的中心元素返回true( 3水平或3垂直的中心元素,或组在两个方向时的角元素)< / p>
由于[{3}}
中描述的原因,对数组使用for .. in
也是一个坏主意