2017-03-26 7 views
1

私は配列を含むオブジェクトを持っています。私は勝利率で配列をソートしようとしていますが、次のコードは何もしないようです。私はcompareWinRate関数が呼び出されているのを見ることはできませんが、私はなぜそうではないのか分かりません。JavaScriptの比較機能が呼び出されていませんか?

let statistics = { 
    wins: 0, 
    kills: 0, 
    deaths: 0, 
    assists: 0, 
    heroes: [], 
}; 

statistics.heroes[hero1] = { matches: 5, wins: 2 }; 
statistics.heroes[hero2] = { matches: 5, wins: 4 }; 

function compareWinRate(a, b) { 
    return ((b.wins/b.matches) - (a.wins/a.matches)); 
} 

statistics.heroes.sort(compareWinRate); 

sortステートメントの前後に配列を表示すると、それらは同じです。

+0

'.sort'(および他の配列方法が)のみ数値配列プロパティ('配列[0]、配列[1] 'と連携しますなど)、名前付きのものは完全に無視します。したがって、 '.sort'の観点から、配列は空です。 – georg

+0

'hero1'と' hero2'とは何ですか?どのように配列を表示しますか?完全なコードを入力してください。 – Bergi

+0

'statistics.heroes [" hero1 "] = {matches:5、wins:2}と言うとき、あなたは配列を埋めるわけではなく、ヒーローオブジェクトにプロパティを追加するだけです。比較関数が呼び出されませんでした。だからあなたはGiladによって与えられた解決策を試すことができます – vinayakj

答えて

2

compareWinRateは私にとってうまく感じます。ちょうど統計割り当てる

は、アレイ内の数値インデックスにオブジェクト:

statistics.heroes[0] = { matches: 5, wins: 2 }; 
statistics.heroes[1] = { matches: 5, wins: 4 }; 
+0

これは私がやったことです。オリジナルの投稿のように最初の配列を読み込んだ後、私は先に進んで、数字のインデックスを持つstatsオブジェクトの新しい配列を作成しました。 – cklugewicz

関連する問題