2017-02-14 53 views
-1

我有這樣的代碼如下。我預計差異數組需要排序,但是當我使用Chrome進行檢查時,差異數組在排序前後是相同的。請幫助指出我的代碼中出現了什麼問題,以及爲什麼sort方法不起作用。看起來它與數組的創建方式(使用推式)有關,但不知道那裏出了什麼問題。javascript排序使用推式方法使用的對象數組

var differences = []; 

for (i = 0; i < locations.length; i++) { 
    var myObj = { 
     lat  : locations[i].lat, 
     lng  : locations[i].lng, 
     distance : locations[i].lng 
    }; 

    differences.push(myObj); 
} 

function compare(a, b) { 
    if (a.distance < b.distance) 
     return -1; 

    if (a.distance > b.distance) 
     return 1; 

    return 0; 
} 

console.log(differences); 
differences.sort(compare); 
console.log(differences); 
+0

這可能只是鉻積極主動,並顯示你在這兩個日誌相同的對象。在你的第一個日誌中,做這個'console.log(JSON.parse(JSON.stringify(differences)));' – tymeJV

+0

另外,Sort在數字上使用時並不是一個穩定的方法,因爲sort方法使用Unicode進行排序。例如,var nums = [2,10]; nums.sort();會輸出10個,2個而不是2個,因爲在unicode中,10個以unicode點的順序前2個。我會建議不要在數字上使用排序。 – Korgrue

+0

@Korgrue OP使用自定義比較功能。你的論點不適用。 – AmericanUmlaut

回答

1

當您輸出對象時,Chrome瀏覽器的控制檯不會將對象轉換爲字符串。相反,它顯示對象的實際內容,如果對象隨後發生更改,則更新對象的內容。

爲了證明這一點,打開控制檯,然後輸入以下行:

var obj = {}; 
console.log(obj); 
obj.helloWorld = "Hi there"; 

通過擴大obj你可以看到「HelloWorld」的屬性在輸出爲它定義,即使你在你加入它記錄到控制檯。

這意味着你的排序功能工作正常。如果你想看到之前和之後的差異,你可以克隆的對象,當你登錄它:

console.log(JSON.parse(JSON.stringify(differences))); 
+0

我試過了,但沒有奏效。我注意到的另一件事是,當我記錄差異數組(在排序之前或之後)時,它會返回(在Chrome控制檯中)像這樣的數組,當我單擊它時,將以0:Object 1:Object等形式展開。對象擁有相應屬性的值。當我嘗試記錄差異[0]或差異[1]時,它返回未定義,這看起來很奇怪,因爲差異是一個數組。不知道是什麼原因導致此行爲 – altin

+0

@altin什麼都不起作用?在排序前後記錄數組並未顯示它已更改? – AmericanUmlaut

+0

我無法看到陣列中的任何對象。在這兩種情況下,它都返回一個空數組。 – altin

相關問題