Javascript 匹配二维或一维阵列中的阵列

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]

我很难弄明白这一点。我有一个名为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 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;
            }
        }
    }
}