2012-12-04 17 views
5

私はオブジェクトリテラルを持っています。そのキーの値はより多くのオブジェクトであり、内部オブジェクトのキーの1つは「ランク」と呼ばれ、浮動小数点値を持ちます。私はオブジェクトのリテラルを "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 } 
] 
+2

任意のコードこれまで:) –

+2

ポストいくつかのコード、できれオブジェクト問題の – adeneo

+1

配列に変換するオブジェクトリテラルコードを表示する必要があります。コードを私たちに教えてください。 – jfriend00

答えて

7

例:

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

Javascriptを:最初sortインナーオブジェクトobj.rankの値とそのmap後含むオブジェクトによってアレイにだろう

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

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


参考:Object.keysArray.prototype.sortArray.prototype.map


上記のコードは、すべての最新ブラウザで利用可能であるのECMAScript 262版5のコードが含まれています。レガシーブラウザもサポートしたい場合は、さまざまなES5-Shimライブラリの1つを含める必要があります。あなたのオブジェクトのプロパティを超える

+0

+1非常に良い答え –

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

ヘルプセクションの指示に従って "@"記号を使用して、ユーザーnnnnnnに返信しようとしています。それは動作していません。私はMacやPCを使って、この問題を他の投稿でも持っていました。ユーザー名の前に "@"記号を使用すると表示されません。このような質問をどこに投稿すればよいですか? – Chris22

+0

とにかく、nnnnnnの場合、配列のソートメソッドで 'a.rank-b.rank'は何をしますか?ありがとう。 – Chris22

+1

@ Chris22 ['.sort()'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort)では、いつでも呼び出される関数を渡すことができます配列内の2つの要素の比較が必要です。 - aとbは2つの要素です。比較関数は、ソートされた結果において 'a'が' b'の後に来る場合は正の数を返し、 'b'の前に' a'があれば負の数を、 'a'と' b'なら '0'を返す必要があります。ソートの目的で等しくなります。この場合、要素は 'rank'プロパティを持つオブジェクトであるため、' a.rank -b.rank'は適切な値を返します。 – nnnnnn

関連する問題