Javascript 二维数组indexOf

标签 javascript arrays 2d indexof

我有一个像这样的二维数组:

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/

相关文章:

javascript - 为什么 TypeError : Cannot read property '0' of undefined?

javascript - 对数组中的特定元素进行计数

java - 二维数组中的联合查找 (Java)

php - 远程缓存自动完成问题

javascript - Firestore : Multiple 'array-contains'

javascript - 类型 'Date' 不可分配给类型 'Observable<Date>' - Angular 6+

javascript - p5.j​​s 中对象的 2D 网格

JavaScript 未在 Firefox 中执行

python - Python 中的类字符列表映射如何工作?

r - 如何找到 R 中给定区域内 voronoi 单元的面积?