【问题标题】:inArray, indexOf in a 2-dimensional arrayinArray, indexOf 在一个二维数组中
【发布时间】:2012-09-05 12:05:51
【问题描述】:

我有一个二维数组。例如

var bruecken = [[1,2],[3,4]];

现在我正在尝试测试是否存在子数组:

console.log(jQuery.inArray([1,2], bruecken));

console.log(bruecken.indexOf([1,2]));

但两种方式都返回-1。我做错了什么?

【问题讨论】:

标签: javascript jquery arrays indexof


【解决方案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 而不是 ifalse 而不是 -1

【讨论】:

    【解决方案2】:

    我认为 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盗用

    【讨论】:

    • 谢谢!这就是我需要的。您能否为inArray(matches, target) 之类的返回布尔值的函数提供示例代码?
    • 更改为根据要求返回布尔值的函数
    猜你喜欢
    • 2014-09-16
    • 1970-01-01
    • 2019-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-04
    • 2021-10-21
    • 1970-01-01
    相关资源
    最近更新 更多