2017-03-26 80 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

這就是我最終做的。在我的原始文章中加載第一個數組之後,我繼續創建了一個帶有數字索引的新數組對象,這些對象允許我將它們正確排序以供顯示。 – cklugewicz