我有一个像这样的二维数组:
var arr = [[2,3],[5,8],[1,1],[0,9],[5,7]];
每个索引存储一个包含某个元素坐标的内部数组。
如何使用 Array.indexOf()
检查新生成的坐标集是否已包含在 arr 中?如果坐标不重复,我想插入 arr
。
这是我的尝试,但没有成功:
if (arr.indexOf([x, y]) == -1) {
arr.push([x, y]);
}
看起来 indexOf()
不适用于二维数组...
最佳答案
您不能使用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 。
否则这可能足以满足您的需要。
关于Javascript 二维数组indexOf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24943200/