var BetterListModel = function() {
this.allItems = ko.observableArray([
{ name: 'Denise' },
{ name: 'Charles' },
{ name: 'Bert' }
]); // Initial items
this.sortItemsAscending = function() {
this.allItems(this.allItems().sort(function(a, b) { return a.name > b.name;}));
};
this.sortItemsDescending = function() {
this.allItems(this.allItems().sort(function(a, b) { return a.name < b.name;}));
};
};
hatları açıkladı: weWiliChangeTheArrayToValue (weWilSortTheArrayWithASpecialFunction (ComparatorFunction))
ComparatorFunction yani .
function(a, b) { return a.name < b.name;}
, sıralama işlevinin ... iyi sıralanmasına yardımcı olan özel bir işlevdir.
2 argüman alır ve ilk argüman 'büyük' (listeden daha uzakta olmalı) ve ilk argüman 'küçük' ise 'false' doğru döndürür.
Her (neredeyse) sıralama algoritması, 2 elementi karşılaştırarak çalışır sıralı koleksiyonun hepsi sıraya girene kadar. Eğer olmayan karşılaştırırsanız: Bunu yapmak için en kolay yolu <
EDIT'e bir şey daha> operasyonu değiştirerek olduğunu - sırasını değiştirme
normalde gerçek döneceğini zaman işlev false döndürür emin olarak yapılır ASCII karakterleri a.localCompare (b) döndürmesini kullanır; (Ve b.localCompare (a) geri;) "-" numaralarını kullanımı ile ilgili ne zaman ve şarkı nedenle kullanımı dizi çiftleri ile kırılabilir ">" yukarıdaki yöntemi Uyarı aritmetik işlem
EDIT2
var
return a.name < b.name ? -1 : a.name > b.name ? 1 : 0;
bunun yerine (veya yalnızca localCompare)
Artan ve azalan sıralama için size cevap düzenleyebilir misiniz? Kafam karıştı, a ve b nedir? – Ahmed
'a' ve 'b', uygulamanızda kullandığınız değişkenler değildir, aslında sıralama işlevinden rasgele değişkenler vardır, çünkü sıralama işlevleri 2 öğe ayırmak için 2 parametre almalıdır, doğru mu? :) – dpaul1994
Genellikle kod örneğinizi açıkladığınız ve sadece bir kopyala yapıştırmanın yanı sıra cevap vermediğiniz kabul edilir. Bu, bu konu hakkında daha fazla bilgi edinmek için buraya gelen gelecekteki kullanıcılara yardımcı olur. –