2

バックグラウンド

JavaScriptを使用して、そのオブジェクトの特定のプロパティに基づいて大きなJSONオブジェクトを並べ替える必要があります。 マージソートが最速のアプローチだと思います。これが最速のアプローチではない場合は、それが何であるかを教えてください。配列に対するマージソートのオンラインの例は無数にありますが、オブジェクトの例はほとんどありません。サンプルオブジェクトは次のとおりです。

fruitForSale = {
     1: {"type":"orange","UnitPrice":0.20},
     2: {"type":"banana","UnitPrice":0.30},
     3: {"type":"pear","UnitPrice":0.10},
     4: {"type":"apple","UnitPrice":0.50},
     5: {"type":"peach","UnitPrice":0.70}
}

質問

fruitForSaleマージソート(またはより高速なアルゴリズム)を使用して、オブジェクトを「タイプ」でソートされたオブジェクトになるようにどのようにソートしますか?

   fruitForSale = {
                     4: {"type":"apple","UnitPrice":0.50},
                     2: {"type":"banana","UnitPrice":0.30},
                     1: {"type":"orange","UnitPrice":0.20},
                     5: {"type":"peach","UnitPrice":0.70},
                     3: {"type":"pear","UnitPrice":0.10}                  
                   }

注:元のkeys(1、2、3、4、5)はそれぞれのオブジェクトに割り当てられたままである必要があるため、のキーは1常にと一致する必要が{"type":"orange","UnitPrice":0.20}あり、のキー2は常にと一致するという{"type":"banana","UnitPrice":0.30}ようになります。

ありがとう!

4

1 に答える 1

2

オブジェクトのキーを並べ替えることはできませんが、並べ替えられたキーの独自の配列を保持することはできます。

var fruitForSale = {
     1: {"type":"orange","UnitPrice":0.20},
     2: {"type":"banana","UnitPrice":0.30},
     3: {"type":"pear","UnitPrice":0.10},
     4: {"type":"apple","UnitPrice":0.50},
     5: {"type":"peach","UnitPrice":0.70}
},

sortedKeys = Object.keys(fruitForSale).sort(function (i,j) {
    return fruitForSale[i]["type"] > fruitForSale[j]["type"];
});

例: http: //jsfiddle.net/X2hFt/(コンソールに表示される出力)

Object.keysはどこでもサポートされているわけではありませんが、必要に応じてポリフィルすることができます。参照してください

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/keys

ああ、そしてソートの基本的な実装に興味がある場合は、以下を参照してください。

Javascript Array.sortの実装?

于 2012-04-08T21:24:00.963 に答える