2017-10-30 8 views
0

私はオブジェクトをソートしようとしています。私のデータ構造は次のとおりです enter image description hereJavaScriptを使用してオブジェクトを数値でソートする方法

私はこれを行う方法についていくつかの記事を見つけました。私は新しい配列を作成し、それにプレーヤーのオブジェクトと同様に投票値を押しています。私が抱えている問題は、番号でオプションをソートし、配列から投票数を取り除くことです。ここに私のコード

var sortedOptions = []; 
    for (let option of options) { 
     sortedOptions.push(option, option.votes); 
    } 

    sortedOptions.sort(function(a, b) { 

    }) 

だ私はthisを、次のされていますが、私はソート機能が働いて、どのように自分の目的のためにそれを行うには方法を理解していません。あなたの助けのための

感謝:)

編集:私は、次のコードをやってみましたが、これは8オプションを使用してオブジェクトを返していましたし、オブジェクトが

sortedOptions.sort(function(a, b) { 
     return a.votes - b.votes; 
    }) 

にソートされていない enter image description here

+0

{関数a(a、b){return a.uiIndex-b.uiIndex} ' – Rajesh

+0

[' Array.prototype.sort() ']を使うことができます。 (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort) – Danmoreng

+0

@ダンモーレンOPは既にそれを使用しています。 :-p – Rajesh

答えて

3

にあなたは使用することができますArray.prototype.sort()

sort関数は引数として関数を取ります。この関数は、配列の2つの要素を比較して、どちらをソートするかを決定します。あなたがそうのようにそれを書くの投票に基づいてソートする、あなたのケースでは

options.sort(function(a, b) { 
    // use b - a to sort descending, a - b to sort ascending 
    return b.votes - a.votes; 
}) 

ザ・forループを使用しているが奇妙である:それはオブジェクトと数字の混合である配列を生成し、そのため、ソート機能は機能しません。 optionsを直接ソートするか、コピーを使用する必要がある場合let sortedOptions = JSON.parse(JSON.stringify(options));

+0

回答者に感謝します。私はちょうどそれを与えてみました、それは以前の挿入された投票を削除していないので、4の代わりに8つの値を持つsortedOptionsであり、私も以前に持っていた問題であったソートされていません。私はスクリーンショットで質問を編集して、私が意味することをよりよく説明しました。 – jSutcliffe90

+0

'options'配列で直接ソートすることもできます。 for-loopは私を苛立たせていましたが、元の配列のコピーだけをソートしたいと思っていました。あなたのループでは、票と投票を含むオブジェクトを配列に追加します。ソート関数はうまくいきません。 – Danmoreng

+0

私はちょうどあなたが与えた答えでそれをしました、私はそれをオプション配列から直接ソートしました。ソートされた合計をsortedOptionsに追加してリンクした記事に続いて、ちょっと混乱していたようだ。私はそれをする必要はなかったので、あなたの答えにちょうど従った。乾杯、すべてのベスト – jSutcliffe90

関連する問題