我有一个如下所示的数组:
1. coordinates = [ [16.343345, 35.123523],
2. [14.325423, 34.632723],
3. [15.231512, 35.426914],
4. [16.343345, 35.123523],
5. [15.231512, 32.426914] ]
第 5 行的纬度与第 3 行相同,但它们的经度不同,因此不重复。
第 3 行和第 6 行的纬度和经度相同,因此是重复的,应该删除一个。
最佳答案
这个问题的难点在于不同的数组永远不会比较相等,即使它们包含相同的值。因此直接比较方法,如 indexOf
将不起作用。
以下模式可能有助于解决此问题。编写一个函数(或使用内置函数)将数组转换为标量值并检查这些值在集合中是否唯一。
uniq = function(items, key) {
var set = {};
return items.filter(function(item) {
var k = key ? key.apply(item) : item;
return k in set ? false : set[k] = true;
})
}
其中 key
是一个“散列”函数,它将 items
(无论它们是什么)转换为可比较的标量值。在您的特定示例中,仅将 Array.join
应用于数组似乎就足够了:
uniqueCoords = uniq(coordinates, [].join)
关于javascript - 从多维数组中删除重复的元素对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14415787/