如果你想在复杂的数组中查找特定元素,就不能使用indexOf方法(除非你将数组序列化并将每个坐标转换为字符串)。相反,你需要使用for循环(或者while循环)来搜索这个数组中的特定元素,前提是你知道该数组的格式(在本例中是二维数组)。
var arr = [[2,3],[5,8],[1,1],[0,9],[5,7]];
var coor1 = [0, 9];
var coor2 = [1, 2];
function isItemInArray(array, item) {
for (var i = 0; i < array.length; i++) {
if (array[i][0] == item[0] && array[i][1] == item[1]) {
return true;
}
}
return false;
}
console.log("Is it in there? [0, 9]", isItemInArray(arr, coor1));
console.log("Is it in there? [1, 2]", isItemInArray(arr, coor2));
if (!isItemInArray(arr, [x, y])) {
arr.push([x, y]);
}
这个实现循环并获取每个值。如果您关心性能,可以执行更复杂的操作,例如按第一个索引对原始数组进行排序,然后在第一个索引上使用二进制搜索。
另一种方法是将数组中每个项目的第一个坐标存储到对象(类似哈希表)中,并将每个桶中的第二个值存储到其中,以减少搜索时间;更多信息请参见http://en.wikipedia.org/wiki/Bucket_sort。
否则,这可能已经足够满足您的需求。
return true
=>return i
- Joe Moore