Javascript Knockout.js排序列表

Javascript Knockout.js排序列表,javascript,jquery,knockout.js,Javascript,Jquery,Knockout.js,我使用knockout.js对选择列表进行了排序。我想将其转换为无序列表。使用knockout.js对列表进行排序的方法是什么?我认为错误在于:allItems()。长度>1 var BetterListModel=函数(){ this.allItems=ko.array([ {name:'Denise'}, {姓名:'查尔斯'}, {name:'Bert'} ]);//初始项 this.sortItems=函数(){ this.allItems.sort(); }; }; 应用绑定(新的Be

我使用knockout.js对选择列表进行了排序。我想将其转换为无序列表。使用knockout.js对列表进行排序的方法是什么?我认为错误在于:allItems()。长度>1

var BetterListModel=函数(){
this.allItems=ko.array([
{name:'Denise'},
{姓名:'查尔斯'},
{name:'Bert'}
]);//初始项
this.sortItems=函数(){
this.allItems.sort();
};
};
应用绑定(新的BetterListModel());
分类
var BetterListModel=函数(){
this.allItems=ko.array([
{name:'Denise'},
{姓名:'查尔斯'},
{name:'Bert'}
]);//初始项
this.sortItemsAscending=函数(){
this.allItems(this.allItems().sort(函数(a,b){返回a.name>b.name;}));
};
this.sortItemsDescending=函数(){
this.allItems(this.allItems().sort(函数(a,b){返回a.name
解释如下: WewilliChangeTheArrayToValue(WewilliSortThearRaywithAspecialFunction(ComparatorFunction))

比较器功能

function(a, b) { return a.name < b.name;} 
函数(a,b){返回a.name
是一个特殊函数,帮助排序函数。。。好的分类。
它接受两个参数,并将它们进行比较,如果第一个参数“更大”(应该在列表中更远),则返回true;如果第一个参数“更小”,则返回false
每个(几乎)排序算法都通过比较已排序集合的两个元素来工作,直到所有元素都处于有序状态。
通过确保函数在正常情况下返回true时返回false来更改顺序-最简单的方法是将>操作更改为<

再编辑一件事:如果您比较非ASCII字符,请使用返回a.localCompare(b);(并返回b.localCompare(a);)当处理数字时,使用“-”sing,这是一个算术运算

编辑2
警告:上述方法“>”可能在使用数组时因重复而中断

return a.name < b.name ? -1 : a.name > b.name ? 1 : 0;
返回a.nameb.name?1 : 0;

相反(或只是本地比较)

您可以编辑您的答案进行升序和降序排序吗?我搞不清楚a和b是什么?'a'和'b'不是应用程序中使用的变量,它们实际上是排序函数中的一些随机变量,因为排序函数需要接收两个参数来排序两个项目,对吗?:)它被普遍接受,这样您就可以解释您的代码示例,而不仅仅是提供一个复制粘贴的答案。这有助于到达此处的未来用户查找有关此主题的更多信息。这应该标记为正确答案。它回答了问题并解释了代码示例中发生的事情+1.
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;}));
    };
};
function(a, b) { return a.name < b.name;} 
return a.name < b.name ? -1 : a.name > b.name ? 1 : 0;