2013-01-11 84 views
1

我有一段代碼觸發了一些操作。在此之前,它只是對權重進行排序。當我使用時一切正常:weight.sort()其中weight是一個非空數組,例如[10 20 30 40],但是當我修改成:array.sort()和array.sort(function(a,b){return a - b;})有什麼區別?

weight.sort(function(a,b) { 
    return a - b; 
}); 

行動的一個沒有任何影響(顯示一個div)。說實話,我不知道什麼可能會導致差異。這對我來說似乎很奇怪,因爲weight在對兩種方法進行排序並明確更改該代碼段使得我的腳本工作與否之後是相同的。 FireBug中沒有錯誤。

+1

這裏是一個有用的鏈接; https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/sort。 – Rikonator

回答

2

如果你

weight = weight.sort 

項目通過使用逐一比較排序。 => 2 > 10

但是當你做

weight = weight.sort(function(a,b) { return a - b; }); 

的項目爲數字而不是字符串列表按升序排序進行比較。 => 2 < 10

此外,

weight = weight.sort(function(a,b){return b-a}); 

將降序排序。

+0

'返回a - b'與默認分揀機不一樣。默認分揀機進行字典對比。 –

+0

@AtesGoral感謝您的更新...... – ATOzTOA

1

我們通常使用這種排序來實現某種自定義比較。在這種情況下,只調用sort的唯一區別是元素的順序 - 使用您顯示的代碼,數組將按降序排列(從大到小排列),而不是典型的遞增順序。

請注意,無參數排序將返回b-a而不是符號不同的a-b,從而反轉比較。

1

Array.prototype.sort沒有自定義排序功能對lexicographical order中的項進行排序。

您可以定義自定義函數來使用它們的任何屬性對任何類型的項進行排序。只要確保函數根據比較結果返回負數/正數或0即可。 (數字)

items.sort(function (a, b) { 
    return a.name.localeCompare(b.name); 
}); 

或者由他們priority性質的項目進行排序:例如,與name屬性的對象根據名稱進行排序,你可以使用

items.sort(function (a, b) { 
    return a.priority - b.priority; 
}); 

在您的自定義分揀機,您可以根據自己的喜好來比較任意數量的特性。另外請確保您優雅地處理未定義的項目或項目屬性。一個設防的排序按姓名例如:

items.sort(function (a, b) { 
    var aName = a && a.name || "", 
     bName = b && b.name || ""; 
    return aName.localeCompare(bName); 
}); 
相關問題