2013-08-27 76 views
3

我幾乎完成了我的流星投票項目,它基於Meteor排行榜,但我有一個小問題。流星:排序表

我的數據庫中的每個項目都有一個包含給定分數的數組。我總結數組並在我的應用程序中顯示結果。問題:它沒有排序,它只按名稱排序(name = _id)。

HTML:

<template name="voting"> 
    {{#each books}} 
     {{> book}} 
    {{/each}} 
</template> 
<template name="book"> 
    <div class="book {{selected}}"> 
     <span class="name">{{_id}}</span> 
     <span class="totalscore">{{totalscore}}</span> 
    </div> 
</template> 

JS

Template.voting.books = function() { 
    return Books.find({flag: "score20130901"}, {sort: {totalscore: -1, _id: 1}}); 
}; 

Template.book.totalscore = function() { 
    var total = 0; 
    for (var i=0; i<6; i++) { 
     total += this.score20130901[i]; 
    } 
    return total; 
}; 

DB(文檔的例子)

{ 
    _id: "Dancing Joe", 
    flag: "score20130901", 
    score20130714: [0,0,8,0,0], 
    score20130901: [0,4,0,5,0] 
} 
+0

你想澄清一下嗎?例如,Books模式會很有幫助。 – BenjaminRH

+0

嗨本傑明。我編輯了我的問題。我的目標是總結文檔的分數,我的應用程序以排序的方式顯示所有書籍和總計核心的名稱。希望你瞭解我的項目。這很難描述,但不幸的是我不能在這裏發佈整個項目/源代碼:) – Struct

回答

2

我想我明白了。試試這個(Underscore.js是我們這裏的朋友):

Template.voting.books = function() { 
    // First, get the books as an array 
    var books = Books.find({flag: "score20130901"}).fetch(); 
    // Next, loop through the books, using underscore's sortBy method 
    return _.sortBy(books, function (book) { 
     // For each book, the number it should sort by is the sum of numbers in the score array 
     return _.reduce(book.score20130901, function (memo, num) { 
      return memo + num; 
     }); 
    }).reverse(); // reverse() here for descending order 
}; 
+0

它幾乎可以工作,但總分的順序是錯誤的。它應該是降序,但它是升序:) – Struct

+1

嘿:)我已經更新了答案。實際上這很簡單。 JavaScript的數組有'反向'方法 – BenjaminRH

+0

@Struct如果這有效,請記住將此答案標記爲「Accepted」 – BenjaminRH