2

为什么这段代码会抛出和越界错误,看起来它应该可以正常工作。

var a = [[[3,4],[0,0],[0,6],[7,8],[0,9],[8,3]]];
    var b = [3,4];
    console.log(jQuery.inArray(b,a[0][0]));
4

2 回答 2

3

你找不到它,因为它不在那里。在 JavaScript 中,仅仅因为两个数组具有相似的内容并不意味着数组本身是相等的。在您的控制台中尝试以下操作:

[3,4] === [3,4];

输出将是 的false,因为两个相似的数组不是同一个数组。如果您希望此代码正常工作,您实际上必须将一个数组放入另一个数组中,如下所示:

var a = [3,4];
var b = [5,a]; // [5,[3,4]]

jQuery.inArray(a, b); // a is found at index 1

如果您只想检查 haystack 中是否存在类似的数组,您可以将整个 needle 和 haystack 字符串化,并查找子字符串:

var needle = JSON.stringify([3,4]);
var haystack = JSON.stringify([[3,4],[5,6]]);

haystack.indexOf(needle); // needle string found at index 1

但是您应该注意,返回的索引是找到字符串化表示的索引,而不是在大海捞针中找到数组的实际索引。如果你想找到数组的真正索引,我们必须稍微修改一下这个逻辑:

var needle = JSON.stringify([3,4]),
    haystack = [[3,4],[5,6]],
    position = -1,
    i;

for (i = 0; i < haystack.length; i++) {
    if (needle === JSON.stringify(haystack[i])) {
        position = i;
    }
}

console.log(position); // needle found at index 0​​​

运行此代码:http: //jsfiddle.net/DTf5Y/

于 2012-11-18T17:03:51.613 回答
0

问题是你有太多的方括号。

var a = [[[3,4],[0,0],[0,6],[7,8],[0,9],[8,3]]];
    var b = [3,4];
    console.log(jQuery.inArray('b',a[0][0]));

应该

var a = [[3,4],[0,0],[0,6],[7,8],[0,9],[8,3]];
    var b = [3,4];
    console.log(jQuery.inArray('b',a[0][0]));
于 2012-11-18T17:08:35.547 回答