2017-06-11 17 views
2

私は巨大なオブジェクトの配列をソートしようとしています。オブジェクトの配列を値で並べ替える

以下の機能を作成しました。それは少し並べ替えオブジェクトを行い、

WordCounter.prototype.sortArray = function(array) { 

    this.sortedArray = array.sort(this.compare); 
    }; 

は、私は、以下の機能を使用して、配列を反復処理:私は、この機能で参照

WordCounter.prototype.compare = function(a, b) { 
    if (Object.values(a) < Object.values(b)) { 
     return -1; 
    } 
    if (Object.values(a) > Object.values(b)) { 
     return 1; 
    } 
    return 0; 
    }; 

:私はこのようになります比較する機能を持っていますチャンクでそれを行うようだ:ここでは

WordCounter.prototype.returnWords = function(array) { 
    for (var key in array) { 
     return array[key]; 
    } 
    }; 

を参照するためのいくつかのダミーデータである、オブジェクトの数千人は、しかし、アレイに実際にあります。

[{tongues: 1}, {unpleasant: 50}, {sneak: 13}, {marched: 12}, {flaming: 2}] 

私はこのようにそれをソートする必要があります。

[{unpleasant: 50}, {sneak: 13}, {marched: 12}, {flaming: 2}, {tongues: 1}] 

それが唯一のハッシュの配列全体を少し並べ替えとされていない理由を任意のアイデア?

+1

があります悪い考え:それはすぐにforループを停止します。サンプルデータと必要な出力を提供してください。 – trincot

+0

ああ、ありがとう! - 今のところconsole.logに変更しました – Freddy

+1

また、 'Object.values(a) trincot

答えて

2

は、あなたはそのことで、ソートそれだけで一つの特性を持っていると仮定すると、オブジェクトから値を取得するヘルパー関数getValueを使用して、することができます:forループの内側に戻っ

function getValue(obj) { 
 
    for (let key in obj) return obj[key]; // return any value found in the object 
 
} 
 

 
// Sample data 
 
var arr = [{tongues: 1}, {unpleasant: 50}, {sneak: 13}, {marched: 12}, {flaming: 2}]; 
 

 
// Sort it 
 
arr.sort((a, b) => getValue(b) - getValue(a)); 
 

 
console.log(arr);
.as-console-wrapper { max-height: 100% !important; top: 0; }

+0

完全に動作します。ありがとうございました! – Freddy

+0

Concise&clever – Tyblitz

+0

@trincot、最初のキーのアクセスはどちらか早いです、 'Object.keys'、' for'かイテレータか? –

関連する問題