我很难搞清楚这一个。我有一个名为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, 2, 1, 1]
这是我做过的jsFiddle,好像我很接近但仍然无法得到它:http://jsfiddle.net/dH2gx/1/
如果您将answerArray更改为[1,4]
,您会看到它显示“在案例4中找到匹配”
答案 0 :(得分: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"
答案 1 :(得分:0)
我想通了!!对于将来尝试做同样事情的人。
我在这里看到了一个数组原型“比较”(SO Answer)
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;
}
}
}
}
答案 2 :(得分:-1)
NOOOO! EVAL()!我的名人!
基本上,问题是case4是undefined
。你的for循环使用<=
所以迭代器将会包括4.当你输入数组比较函数时,它不会进入类型检查块,因为这显然不是Array的实例。但是,没有什么能使它返回虚假。
只需将类型检查与arraysEqual
中的长度比较一起移动,然后返回false。哦,并且......很多时候你会被要求不要在你的代码中使用eval
。不过,我会假设它只是一种编写测试的快捷方式。