10个元素的数组是排序,但100的数组不是

时间:2017-06-17 16:23:40

标签: javascript knockout.js

我有一个具有计算属性

的Knockout应用程序
  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/

这可能是什么原因?

1 个答案:

答案 0 :(得分:3)

对于排序数字,返回差异,因为这是正确的方法。

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

Updated fiddle link.

检查以下MDN docs

中的说明

如果提供compareFunction,则根据compare函数的返回值对数组元素进行排序。如果a和b是要比较的两个元素,那么:

  • 如果compareFunction(a,b)小于0,则将a排序为低于b的索引,即a先出现。
  • 如果compareFunction(a,b)返回0,则保持a和b相对于彼此保持不变,但是对所有不同的元素进行排序。注意:ECMAscript标准不保证这种行为,因此并非所有浏览器(例如可追溯到至少2003年的Mozilla版本)都尊重这一点。
  • 如果compareFunction(a,b)大于0,则将b排序为低于a的索引。
  • compareFunction(a,b)在给定一对特定元素a和b作为其两个参数时必须始终返回相同的值。如果返回不一致的结果,则排序顺序未定义。