Javascript indexOf用于未找到数组的数组数组

joe*_*ish 8 javascript arrays jquery

我有一个嵌套数组的数组,如下所示:

var tw = [[3, 0], [11, 0], [3, 14], [11, 14]];
Run Code Online (Sandbox Code Playgroud)

当我尝试查找数组是否tw包含传入的数组时,我总是得到-1的结果.

例如:

var test = $.inArray([3, 0], tw);
var test2 = tw.indexOf([3, 0]);
Run Code Online (Sandbox Code Playgroud)

返回-1,即使数组中的第一个对象是[3,0] 如何查明我的数组中是否包含特定的数组数组?

哦,到目前为止我只在IE9上测试过它.

Tim*_*own 10

那是因为你正在寻找一个不同的对象.indexOf()使用严格的相等比较(如===运算符)并[3, 0] === [3, 0]返回false.

您需要手动搜索.下面是一个使用更通用indexOf()函数的示例,该函数使用自定义比较器函数(评论中@ ajax333221建议改进):

// Shallow array comparer
function arraysIdentical(arr1, arr2) {
    var i = arr1.length;
    if (i !== arr2.length) {
        return false;
    }
    while (i--) {
        if (arr1[i] !== arr2[i]) {
            return false;
        }
    }
    return true;
}

function indexOf(arr, val, comparer) {
    for (var i = 0, len = arr.length; i < len; ++i) {
        if ( i in arr && comparer(arr[i], val) ) {
            return i;
        }
    }
    return -1;
}

var tw = [[3, 0], [11, 0], [3, 14], [11, 14]];
alert( indexOf(tw, [3, 0], arraysIdentical) ); // Alerts 0
Run Code Online (Sandbox Code Playgroud)