inArray,indexOf在二维数组中

inArray, indexOf in a 2-dimensional array

本文关键字:二维数组 indexOf inArray      更新时间:2023-09-26

我有一个二维数组。例如

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;    
}

比较两个数组的方法是从这个问题中窃取的