为什么这段代码会抛出和越界错误,看起来它应该可以正常工作。
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]));
你找不到它,因为它不在那里。在 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/
问题是你有太多的方括号。
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]));