我有一個2維數組。例如inArray,indexOf在二維數組中
var bruecken = [[1,2],[3,4]];
現在我想測試一下,如果一個子數組存在:
console.log(jQuery.inArray([1,2], bruecken));
或
console.log(bruecken.indexOf([1,2]));
,但兩種方式返回-1。我究竟做錯了什麼?
我有一個2維數組。例如inArray,indexOf在二維數組中
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會工作,因爲使用==
比較兩個相同的數組將返回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;
}
用於比較兩個數組的方法是從this question
[Search multi-dimensional array JavaScript]可能的重複(http://stackoverflow.com/questions/8809425/search-multi-dimensional-array-javascript) – DrColossos
你知道,你可以upvote你認爲有幫助的答案。 .. ;-) – codebox