我有一个使用knockout.js作为选择列表的排序列表。我想把它转换成一个无序列表。使用knockout.js对列表进行排序的方法是什么?我认为错误出在: allItems().length >1
http://jsfiddle.net/infatti/Ky5DK/
var BetterListModel = function () {
this.allItems = ko.observableArray([
{ name: 'Denise' },
{ name: 'Charles' },
{ name: 'Bert' }
]); // Initial items
this.sortItems = function() {
this.allItems.sort();
};
};
ko.applyBindings(new BetterListModel());
<button data-bind="click: sortItems, enable: allItems().length > 1">Sort</button>发布于 2013-05-25 05:55:03
this.allItems(this.allItems().sort(function(a, b) { return a.name > b.name;}));发布于 2013-07-18 22:23:57
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;}));
};
};已解释的行: weWiliChangeTheArrayToValue(weWilSortTheArrayWithASpecialFunction(ComparatorFunction))
ComparatorFunction即。
function(a, b) { return a.name < b.name;} 是一个特殊的函数,它帮助排序函数...好的,排序。
它接受2个参数并比较它们,如果第一个参数是“较大的”(应该在列表中更远),则返回true;如果第一个参数是“较小的”,则返回false。
每个(几乎)排序算法都是通过比较排序集合的2个元素,直到所有元素都是有序的。
更改顺序的方法是确保函数返回false,而它通常返回true -最简单的方法是将>操作更改为<
再编辑一件事:如果比较非ASCII字符,使用return a.localCompare(b);(和return b.localCompare(a);),在处理数字时使用"-“sing,所以这是一个算术运算
EDIT2
警告上面的方法">“可能会中断数组使用中的重复项
return a.name < b.name ? -1 : a.name > b.name ? 1 : 0;取而代之的是(或者只是localCompare)
https://stackoverflow.com/questions/16744045
复制相似问题