为什么" [[1,2],[3,4]] .indexOf([1,2])"返回-1?

时间:2016-12-27 17:30:54

标签: javascript arrays node.js indexof

我花了最后一个半小时试图在我的代码中找到一个错误,当我终于意识到这个JavaScript代码:

[[1, 2], [3, 4]].indexOf([1, 2]);

返回-1,即使[1, 2, 3].indexOf(1);之类的内容正确返回0 ...

为什么会发生这种情况,如何找到子阵列的正确索引?

2 个答案:

答案 0 :(得分:2)

indexOf仅使用原始参数,但您无法匹配:

[1, 2] == [1, 2]

这显然给了false

答案 1 :(得分:1)

您可以迭代数组并检查模式的每个项目并返回索引。



function getIndexOf(array, pattern) {
    var index = -1;
    array.some(function (a, i) {
        if (a.length !== pattern.length) {
            return false;
        }
        if (a.every(function (b, j) { return b === pattern[j]; })) {
            index = i;
            return true;
        }
    });
    return index;
}

console.log(getIndexOf([[1, 2], [3, 4], [7, 8]], [7, 8]));




JSON和indexOf的另一种方式。



function getIndexOf(array, pattern) {
    return array.map(function (a) { return JSON.stringify(a); }).indexOf(JSON.stringify(pattern));
}

console.log(getIndexOf([[1, 2], [3, 4], [7, 8]], [7, 8]));