1

我很难弄清楚这一点。我有一个名为的数组answerArray,我需要查看它是否与其他 4 个数组之一(有些是 2d)匹配,例如:

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, 2, 1, 1]

这是我做的一个 jsFiddle,看起来我很接近但仍然无法得到它:http: //jsfiddle.net/dH2gx/1/

如果您将 answerArray 更改为[1,4]您将看到它显示“在案例 4 上找到匹配”

4

3 回答 3

0

令人惊讶的是,您可以在数字和数组上使用 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"
于 2013-07-17T16:37:23.323 回答
0

我想到了!!对于将来尝试这样做的任何人。

我在这里看到了一个数组原型“比较”(SO答案

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;
            }
        }
    }
}
于 2013-07-17T18:34:22.280 回答
-1

不!评估()!我的克星!

基本上,问题在于 case4 是undefined. 您的 for 循环使用<=,因此迭代器将上升并包含 4。当您输入数组比较函数时,它不会进入类型检查块,因为这显然不是 Array 的实例。但是,没有什么会导致它返回 false。

只需将类型检查移到 中的长度比较旁边arraysEqual,然后返回 false。哦,还有……你会被多次要求不要eval在你的代码中使用。不过,我将假设这只是编写测试的一种快速方法。

于 2013-07-17T15:55:54.877 回答