从数组中删除重复的坐标

时间:2014-04-02 05:15:42

标签: javascript jquery google-maps

我的数组包含: -

(18.9992561589571, 72.83004879020154),(19.124614516591855, 72.87498710677028)

值,但是为了删除重复的值我称之为“删除重复数据”'功能。但有些时候(在其他情况下,它的工作正常,但有一段时间它会失败),所以我不知道它有什么问题。请帮帮我。

这是removeDuplicates函数: -

function removeDuplicates(arr) {
    var n, y, x, i, r;
    r = [];
    o: for (i = 0, n = arr.length; i < n; i++) {
        for (x = 0, y = r.length; x < y; x++) {
            if (r[x][0] == arr[i][0] && r[x][1] == arr[i][1]) {
                continue o;
            }
        }
        r.push(arr[i]);
    }
    return r;
}

输入: -

array:-   (18.9992561589571, 72.83004879020154),(19.124614516591855, 72.87498710677028)

预期产出: -

array:-   (18.9992561589571, 72.83004879020154),(19.124614516591855, 72.87498710677028)

获得: -
array:- (18.9992561589571, 72.83004879020154)

1 个答案:

答案 0 :(得分:1)

为了完整起见,我将如何实现它:

var arr = [[18.9992561589571, 72.83004879020154],
           [19.124614516591855, 72.87498710677028],
           [18.9992561589571, 72.83004879020154]];

function getUniqueTuples(tuples) {
    var a = [], h = {};
    tuples.forEach(function(t) {
        var k = t[0] + '|' + t[1];
        if (!(k in h)) {
            h[k] = null;
            a.push(t);
        }
    });
    return a;
}

arr = getUniqueTuples(arr);
console.log(arr);

Demo。关键是用重复的哈希查找替换数组查找 - 元组数组越大,速度就越好。


现在让我们检查你的代码:

var a=[];
a.push("(18.9992561589571, 72.83004879020154)");
a.push("(19.124614516591855, 72.87498710677028)");
alert(removeDuplicates(a));

问题在于:removeDuplicates实际上设置为处理数组的数组(反过来,它应该由两个元素组成)。然而,您的原始数组包含字符串,而不是数组。

因此,[0][1]属性在比较时实际上是这些字符串的第0个和第1个字符 - '(''1' in两种情况分别。换句话说,如果坐标中的第一个数字相同,则认为坐标相等。

解决方案?从一开始就使用数组,或者从字符串中创建数组 - 最简单的方法是使用正则表达式,我想:

var patt = /[\d.]+/g;
var firstCoord = "(18.9992561589571, 72.83004879020154)";
var secondCoord = "(19.124614516591855, 72.87498710677028)"; 
a.push(firstCoord.match(patt), secondCoord.match(patt));