2014-06-23 25 views
0

我試圖重新安排我的下劃線模板從JSON文件多維數組,這樣我可以從個案最高#打印出來的疾病的情況下最低#如何使用underscore.js sortBy

的問題來自sortBy函數,實際上並沒有對數組進行排序。

這裏是我與

的totalCases陣列看起來像工作的示例陣列: [163,134,98,118,圖2,167,152,102,49,4,0,0 ,0,1,0,0,1265]

而且sortBy函數爲:

<% _.sortBy(totalCases , function (num) { %> 
    <%= num %> 
<% }); %> 

它返回 163,134,98,118,圖2,167,152,102,49,4 ,0,0,0,1,0,0,1265

我不知道我怎麼使用sortBy

+1

WTH,您在混合'sortBy'(用於分選和返回的數組)與模板(用於輸出)??? – Bergi

+0

'sortBy'需要一個屬性排序! –

+0

增加了一個屬性返回,但仍然沒有排序 'code' totalCases = {1:{「CD」:163},2:{「CD」:98},3:{「CD」:118}}; _.sortBy(totalCases,function(num){ return num.CD; }); – Cuberic

回答

0

你正在以某種方式混合視圖與控制器。您不想在下劃線模板中重新排列,但在呈現它之前。重讀docs for sortBy,它需要對排序標準或屬性名稱進行回調,您不希望在其中輸出任何內容。

<% var sortedCases = _.sortBy(totalCases, function(case) { 
     return // your sort criteria here, e.g. `case.occurences` 
    }); 
%><ol><% 
    _.each(sortedCases, function(case) { %> 
     <li><%= case /* … */ %></li> 
<% } %></ol> 
+0

除此之外,它將從最低到最高排序。所以我將.reverse()添加到sortedCasses變量中。 – Cuberic

+0

或者你反轉排序標準,對於數字你可以通過否定它們來輕鬆完成。 – Bergi

0

不知道你是如何渲染你的模板,但你應該能夠逃脫這樣的事情...爲下劃線的sortBy默認應該是足夠的,那麼你需要遍歷數組新。

DEMO

_.each(_.sortBy(totalCases), function (item) { 
    _.template("<%= item %>", {item: item}); 
}); 

// you should be able to just do the _.each inside the template if you wish too. 
// <% _.each(_.sortBy(totalCases)) %> ... 
+0

你期望'_.template(「<%= item %>」,{item:item})'做什麼? – Bergi

+0

Underscore的'sortBy'沒有默認值,它會根據代碼中的項目的undefined'屬性進行排序。 – Bergi

+0

我希望'item:item'能夠將'_.each()'中的'item'作爲編譯模板的數據。此外,'sortBy'使用傳遞的迭代器作爲排序函數,並在內部調用'lookupIterator()'。如果傳遞給'lookupIterator(value)'的值爲null,則返回'_.identity',它返回傳遞給它的值('_.identity(value)')。我假設(可能不正確)「默認」,因爲我稱它會使用唯一可用的比較器,在這種情況下,是一個整數。 – brbcoding