我有一个二维数组。例如
var bruecken = [[1,2],[3,4]];
现在我正在尝试测试是否存在子数组:
console.log(jQuery.inArray([1,2], bruecken));
或者
console.log(bruecken.indexOf([1,2]));
但两种方式都返回-1。我究竟做错了什么?
我有一个二维数组。例如
var bruecken = [[1,2],[3,4]];
现在我正在尝试测试是否存在子数组:
console.log(jQuery.inArray([1,2], bruecken));
或者
console.log(bruecken.indexOf([1,2]));
但两种方式都返回-1。我究竟做错了什么?
最快的方法是使用 for 循环并比较它们,如果找到则返回。这是您可以使用的东西,我使用 JSON 进行比较,但您可以使用您认为最好的任何比较器(有很多):
function arrayInArray(needle, haystack) {
var i=0, len=haystack.length, target=JSON.stringify(needle);
for(; i<len; i++) {
if (JSON.stringify(haystack[i]) == target) {
return i;
}
}
return -1;
}
arrayInArray( [0,1], [ [1,2], [0,1] ] ); // 1
如果你想要布尔值,只需返回true
而不是i
和false
而不是-1
.
我不认为 inArray 会起作用,因为比较两个相同的数组 using==
将返回 false。您可以尝试grep
改用:
function subArrayInArray(subArray, array){
var matches = $.grep(array, function(a){
// Compare the target array with each of the child arrays
return $(subArray).not(a).length == 0 && $(a).not(subArray).length == 0;
});
return !!matches.length;
}
比较两个数组的方法是从这个问题中偷来的