6

私はオブジェクトリテラルを持っています。そのキーの値はより多くのオブジェクトであり、内部オブジェクトのキーの1つは「rank」という名前で、浮動小数点値を持っています。オブジェクトリテラルを「rank」の値でソートされた内部オブジェクトの配列に変換したいと思います。

入力オブジェクト:

{
452:{
     bla:123,
     dff:233,
     rank:2
  },
234:{
     bla:123,
     dff:233,
     rank:1
  }

}

出力配列:

[
 { bla:123, dff:233, rank:1},
 { bla:123, dff:233, rank:2 }
]
4

2 に答える 2

11

例:

var data = {
    foo: {
        rank: 5
    },
    bar: {
        rank: 2
    },
    baz: {
        rank: 8
    }
};

Javascript:

var mappedHash = Object.keys( data ).sort(function( a, b ) {
    return data[ a ].rank - data[ b ].rank;
}).map(function( sortedKey ) {
    return data[ sortedKey ];
});

これにより、最初sortに値によって内部オブジェクトが作成され、obj.rankその後map、含まれているオブジェクトが配列に格納されます。

結果[{rank: 2}, {rank: 5}, {rank: 8}]


参照:Object.keys、、Array.prototype.sortArray.prototype.map


上記のコードには、ECMAscript 262エディション5コードが含まれています。これは、最新のすべてのブラウザーで使用できます。従来のブラウザもサポートする場合は、さまざまなES5-Shimライブラリの1つを含める必要があります。

于 2012-12-04T01:49:48.057 に答える
0

オブジェクトのプロパティを繰り返し処理し、内部オブジェクトを配列にプッシュしてから、カスタムの並べ替え関数を使用して配列を並べ替えます。

var inputObject = {}, // your object here
    arr = [];

for (var k in inputObject)
    arr.push(inputObject[k]);

arr.sort(function(a,b) { return a.rank - b.rank; });
于 2012-12-04T01:51:13.683 に答える