那是因为您正在寻找不同的对象。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