簡體   English   中英

按對象屬性對對象的javascript數組進行排序

[英]Sort a javascript array of objects by object property

我正在嘗試對數組進行排序。 例如,給定數組a(下),我想返回數組b。

我知道我可以執行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}}
]

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);});

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

function genSortFn(prop){
    return function(a,b){ return a[prop].localeCompare( b[prop] ); };
}
a.sort( genSortFn('s') );
b.sort( genSortFn('s') );
a.sort(function(a, b){
    if(a.s < b.s){
        return -1;
    }
    if(a.s > b.s){
        return 1;
    }
    return 0;
});

http://jsfiddle.net/lbstr/nCKpG/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM