2014-04-02 25 views
-1

我的數組包含刪除重複cordinates: -從一個數組

(18.9992561589571, 72.83004879020154),(19.124614516591855, 72.87498710677028) 

值,但刪除重複值,我稱之爲「removeDuplicates」功能。但有些時候(在其他的下屬工作正常,但有些時候它失敗了),所以我不知道它有什麼問題。請幫幫我。

這裏是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)

+2

尋求幫助時,確實讓人格式化你的代碼和其它的禮貌你的問題中的信息很清楚。你**認爲代碼是可讀的嗎?數據如何顯示?您在輸入問題的位置下方有預覽區域,格式工具的整個工具欄以及「詢問問題」頁面上的橙色**如何格式**。 –

+0

'(something,something)'不是一個數組。 '[something,something]'是。你的函數在調用[正確]時工作得很好(http://jsfiddle.net/LrmW5/)。 – raina77ow

+1

[在Javascript中刪除2d數組中的重複項]可能的副本(http://stackoverflow.com/questions/519899/removing-duplicates-from-2d-array-in-javascript) –

回答

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'在這兩種情況下,。換句話說,如果它們中的第一個數字相同,則認爲您的座標是相等的。

解決方案?無論是使用數組從一開始就從你的字符串的工作,或使陣列 - 這樣做會使用正則表達式的最簡單的方法,我想:

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

Ya,你說的對,你的代碼是工作正常,但在我的代碼最新錯誤?這裏是演示: - http://jsfiddle.net/22CuD/。因爲這個數組包含谷歌地圖座標。 – Mangita

+0

更新了答案。就像我說的,你一直對這種混合感到困惑。 – raina77ow

+0

可能你是對的。但是這是我的動態數組,所以我可以在我的函數中應用你的模式。對於這個我修改我的代碼,請看看http://jsfiddle.net/22CuD/1/ – Mangita