2017-06-17 22 views
1

我有一個敲除應用與計算屬性陣列10個元件中的排序,但100數組不

this.sortedItems = ko.computed(function() { 
    return self.allItems().sort(function(a, b) { 
     return a.name() > b.name(); 
    }); 
}, this); 

我有此應用程式的一切是在分類10數組項http://jsfiddle.net/GSvnh/5925/一個小提琴當項目發生變化時也會開始排序 - 按預期工作。

然後,我有完全相同的代碼,但有100個項目並沒有什麼排序那裏 - 無論它在開始進行排序既不是排序,當一個項目改變http://jsfiddle.net/GSvnh/5926/

可能是什麼原因呢?

回答

3

對於排序數字返回的差異,因爲這是正確的方式來做到這一點。

return self.allItems().sort(function(a, b) { 
    return a.name() -b.name(); 
}); 

Updated fiddle link.


檢查從MDN docs進行的以下描述:

如果的compareFunction被提供時,所述陣列元件根據比較函數的返回值來分類的。如果a和b是兩個元件被比較,則:

  • 如果的compareFunction(A,B)小於0,排序一個比B,即較低的索引至上。
  • 如果compareFunction(a,b)返回0,則相對於彼此保持a和b不變,但相對於所有不同的元素進行排序。注意:ECMAscript標準並不保證這種行爲,因此並非所有瀏覽器(例如,至少可以追溯到2003年的Mozilla版本)都尊重這一點。
  • 如果compareFunction(a,b)大於0,則將b排序爲比a更低的索引。
  • compareFunction(a,b)在給定一對特定元素a和b作爲其兩個參數時,必須始終返回相同的值。如果返回不一致的結果,那麼排序順序是未定義的。
相關問題