您不能使用 indexOf 来处理复杂的数组(除非您将其序列化,将每个坐标都变成字符串),假设您知道数组的格式,您将需要使用 for 循环(或 while)在该数组中搜索该坐标(在这种情况下,它是 2d)。
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++) {
// This if statement depends on the format of your array
if (array[i][0] == item[0] && array[i][1] == item[1]) {
return true; // Found it
}
}
return false; // Not found
}
// Test coor1
console.log("Is it in there? [0, 9]", isItemInArray(arr, coor1)); // True
// Test coor2
console.log("Is it in there? [1, 2]", isItemInArray(arr, coor2)); // False
// Then
if (!isItemInArray(arr, [x, y])) {
arr.push([x, y]);
}
此实现循环并获取每个值。如果你关心性能,你可以做更复杂的事情,比如按第一个索引对原始数组进行排序,然后在第一个索引上使用二分搜索。
另一种方法是将数组中每个项目的第一个坐标存储在一个对象(如哈希表)中,并将第二个值存储在每个存储桶中以减少搜索时间;更多信息在这里http://en.wikipedia.org/wiki/Bucket_sort。
否则,这可能足以满足您的需要。