1

配列を並べ替えようとしています。たとえば、配列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}}
]
4

3 に答える 3

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);});
于 2012-11-13T19:35:22.240 に答える
1

このsortメソッドはcompareFunctionパラメーターを受け入れます。ここで、ソート順の計算方法を定義できます。
文字列を比較したいので、この関数はここでlocaleCompare提案されているように使用する必要があります。 すばやく調整できる並べ替え関数を作成する1つの方法は、別の関数を介してそれを生成することです。これは、オブジェクトの任意のプロパティに対してソート関数を自動的に作成できることを意味します。 2つを一緒に置くとあなたは得る。

function genSortFn(prop){
    return function(a,b){ return a[prop].localeCompare( b[prop] ); };
}
a.sort( genSortFn('s') );
b.sort( genSortFn('s') );
于 2012-11-13T19:37:12.390 に答える
1
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/

于 2012-11-13T19:37:31.637 に答える