我的数组包含: -
(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)
答案 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));