2012-11-13 328 views
1

我想排序數組。例如,給定數組a(下面),我想返回數組b。按對象屬性對對象的一個​​javascript數組排序

我知道我可以做a.sort(),但是,我不想對實際的數組元素進行排序,而是對數組元素的屬性(在本例中爲s)進行排序。這如何實現?

謝謝

var a=[ 
    {s:"ced",o:{obj:1}}, 
    {s:"cde",o:{obj:2}}, 
    {s:"ade",o:{obj:3}}, 
    {s:"bde",o:{obj:4}} 
] 

var b=[ 
    {s:"ade",o:{obj:3}}, 
    {s:"bde",o:{obj:4}}, 
    {s:"cde",o:{obj:2}}, 
    {s:"ced",o:{obj:1}} 
] 
+0

重複:[點擊這裏](http://stackoverflow.com/questions/8900732/javascript-sort-objects- in-an-an-array-alphabet-on-one-property-of-the-arra)和[這裏](http://stackoverflow.com/questions/8966247/sort-objects-by-a-property-values) – lbstr

回答

7

Array.prototype.sort接受一個可選參數:一個回調告訴它如何排序。

a.sort(function(x,y) { 
    // do something here 
    // return -1 if x < y 
    // return 1 if x > y 
    // otherwise, return 0 
}); 

所以,你的情況,這將是:

a.sort(function(x,y) {return x.s == y.s ? 0 : (x.s < y.s ? -1 : 1);}); 
+0

謝謝Kolink。什麼是x和y?例如,x是當前項目,y是最高還是最低? – user1032531

+0

它們是數組中的兩個元素,它們是由'sort'函數挑選出來的,用來確定它們進入的順序。例如,如果輸入數組是'[2,3,1]',那麼它可能會問「什麼爲什麼2和3進去?「......」2和1呢?「......在進入」好吧,我明白了,它是[1,2,3]'。「關鍵是你不需要知道*他們是哪些物品,所有你需要知道的是他們是兩件物品,你被問及如何比較它們。 –

1

sort方法接受的compareFunction參數,在這裏你可以定義如何計算排序順序。
如您想比較字符串,此功能應使用localeCompare作爲建議here
創建可以快速調整的排序功能的一種方法是通過另一個函數生成它。這意味着您可以爲對象的任何屬性自動創建排序函數。
將兩個在一起,你會得到..

function genSortFn(prop){ 
    return function(a,b){ return a[prop].localeCompare(b[prop]); }; 
} 
a.sort(genSortFn('s')); 
b.sort(genSortFn('s')); 
+0

+1。''.localeCompare()' –

相關問題