Javascript 从阵列中删除重复的Cordinate
我的数组包含:-Javascript 从阵列中删除重复的Cordinate,javascript,jquery,google-maps,Javascript,Jquery,Google Maps,我的数组包含:- (18.9992561589571, 72.83004879020154),(19.124614516591855, 72.87498710677028) 值,但为了删除重复值,我调用了“RemovedUpplicates”函数。但有时(在其他科迪纳茨,它工作正常,但有时失败),所以我不知道它出了什么问题。请帮帮我 以下是RemovedUpplicates函数:- function removeDuplicates(arr) { var n, y, x, i, r;
(18.9992561589571, 72.83004879020154),(19.124614516591855, 72.87498710677028)
值,但为了删除重复值,我调用了“RemovedUpplicates”函数。但有时(在其他科迪纳茨,它工作正常,但有时失败),所以我不知道它出了什么问题。请帮帮我
以下是RemovedUpplicates函数:-
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)
获取:-数组:-(18.9992561589571,72.83004879020154)
为了完整起见,我将如何实现它:
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);
。重点是用哈希查找重复项来代替数组查找-元组数组越大,速度就越好
现在让我们检查您的代码:
var a=[];
a.push("(18.9992561589571, 72.83004879020154)");
a.push("(19.124614516591855, 72.87498710677028)");
alert(removeDuplicates(a));
问题是:removeDuplicates
实际上是用来处理数组数组的(数组数组应该由两个元素组成)。但是,原始数组由字符串组成,而不是数组
因此,当比较时,[0]
和[1]
属性实际上是这些字符串的第0个和第1个字符-'(“
和'1'
”),在这两种情况下都是相同的。换句话说,如果它们中的第一个数字相同,则认为坐标相等
解决方案?要么从一开始就使用数组,要么从字符串生成数组-最简单的方法是使用正则表达式,我想:
var patt = /[\d.]+/g;
var firstCoord = "(18.9992561589571, 72.83004879020154)";
var secondCoord = "(19.124614516591855, 72.87498710677028)";
a.push(firstCoord.match(patt), secondCoord.match(patt));
在寻求帮助时,人们是否有礼貌地清楚地格式化您的代码和问题中的其他信息。您认为代码可读吗?数据如何,清晰地显示?在您键入问题的下方有一个预览区域,一个完整的格式化工具工具栏,以及“提问”页面上的一个大橙色“如何格式化”框stion page.
(某物,某物)
不是数组。[某物,某物]
是。调用时,您的函数工作得很好。可能是Ya的重复,您是对的,您的代码工作得很好,但我的代码中有什么错误?这是演示:-。因为此数组包含google map cordinates。更新了答案。正如我所说,您对类型混合感到困惑。可能您是对的。但这是我的动态数组y,这样我可以在我的函数中应用你的模式。为此,我修改了我的代码,请查看控制台,你会发现问题所在-,因为每个在JS中都是无效语法。使用$.map
将一个数组(字符串数组)转换为另一个数组(两个元素数组的数组)更容易。就像。现在我知道了,在这个函数中,输入和输出类型必须是相同的,所以如果我们传递的数组具有“()”类型的符号,那么输出必须包含这些符号。我修改了我的代码。您也可以检查。这可能工作正常。
var patt = /[\d.]+/g;
var firstCoord = "(18.9992561589571, 72.83004879020154)";
var secondCoord = "(19.124614516591855, 72.87498710677028)";
a.push(firstCoord.match(patt), secondCoord.match(patt));