Javascript 匹配二维或一维阵列中的阵列
我很难弄明白这一点。我有一个名为answerArray的数组,我需要查看它是否匹配其他4个数组中的一个,其中一些是2d ex:Javascript 匹配二维或一维阵列中的阵列,javascript,Javascript,我很难弄明白这一点。我有一个名为answerArray的数组,我需要查看它是否匹配其他4个数组中的一个,其中一些是2d ex: var answerArray = [1, 2, 2, 2, 1, 1]; var case1 = [ [1, 2, 3, 1, 1, 1], [1, 2, 2, 2, 1, 1], [1, 2, 3, 2, 1, 1], [1, 2, 2, 1, 1, 1]
var answerArray = [1, 2, 2, 2, 1, 1];
var case1 = [
[1, 2, 3, 1, 1, 1],
[1, 2, 2, 2, 1, 1],
[1, 2, 3, 2, 1, 1],
[1, 2, 2, 1, 1, 1]
];
var case2 = [1, 2, 3, 1, 1, 2];
var case3 = [
[1, 2, 3, 1, 2],
[1, 3, 2, 2, 2]
];
var case4 = [1, 4];
在该示例中,answerArray与case1匹配,因为case1包含[1,2,2,1,1]
这是我做的一个JSFIDLE,看起来我很接近,但仍然无法得到它:
如果您将answerArray更改为[1,4],您将看到它在案例4中显示“已找到匹配项”NOOOO!EVAL!我的复仇女神
基本上,问题在于案例4没有定义。for循环使用令人惊讶的是,您可以在数字和数组上使用RegExp:
var answerArray = [1, 2, 2, 2, 1, 1];
var case1 = [
[1, 2, 3, 1, 1, 1],
[1, 2, 2, 2, 1, 1],
[1, 2, 3, 2, 1, 1],
[1, 2, 2, 1, 1, 1]
];
var case2 = [1, 2, 3, 1, 1, 2];
var case3 = [
[1, 2, 3, 1, 2],
[1, 3, 2, 2, 2]
];
var case4 = [1, 4];
var hit=new RegExp("^"+answerArray+"$", "m");
var names=['case1', 'case2', 'case3', 'case4'];
var res=[case1, case2, case3, case4].map(function(a,b,c){
return hit.test(a.join("\n")) && names[b];
}).filter(Boolean);
alert(res) // shows: "case1"
我想出来了!!对未来任何想做同样事情的人来说 我制作了一个阵列原型,如图所示
在我看来,您可能需要递归调用您的函数,这样,如果您在尝试求值的数组中有嵌套的深层次,您可以递归调用您的函数以查找匹配项。请查看以下答案:@inuitivepixel这正是我尝试的方式,不起作用:/if您将其更改为[3,2]那么它应该匹配case1和case3吗?或者整行必须相等吗?我从1开始计算i,所以case4得到评估。而且,我知道每个人都说我不应该使用eval。在这种情况下,它满足了我的需要,所以现在我将使用它:好吧,这里有一些混乱,因为你的小提琴和你的问题不同:你的问题中没有案例4。是的,很抱歉。修正了这个问题。
for (var k = 1; k <= 4; k++) {//Loop number of cases
var caseArray = eval("case" + k);//To be able to loop through each case
for (var i = 0; i < caseArray.length; i++) {
if ($.isArray(caseArray[i])) { //Check if array[i] is another array (2d array)
if (caseArray[i].compare(answerArray)) { //Compare the nested array
console.log("MATCH " + k);
return k;
}
} else {//Not a 2d array
if (caseArray.compare(answerArray)) {//compare the array
console.log("MATCH " + k);
return k;
}
}
}
}