我希望使用剔除排序方法来排序一个可观察的数组,但是根据文档,将传递两个字段。
myObservableArray.sort(function (left, right) { return left.lastName == right.lastName ? 0 : (left.lastName < right.lastName ? -1 : 1) })从哪里得到左参数和右参数,我是否传递它们,如果我有这样的数组
var dummyArray = [{letter: a, number: 4},{letter: f, number: 3},{letter: t, number: 2},{letter: v, number: 7},{letter: c, number: 9},] 我该怎么处理呢?
发布于 2018-06-22 20:17:54
我要把它们传进去吗?
不,排序函数可以做到这一点。排序需要比较两个值。因此,您需要提供进行比较的函数。
我该怎么处理呢?
取决于你想要怎样分类。由letter?由number?一个接着另一个?被别的什么东西?你必须提供做它的功能。
因此,对于按number升序排序:
var dummyArray = [{letter: "a", number: 4},{letter: "f", number: 3},{letter: "t", number: 2},{letter: "v", number: 7},{letter: "c", number: 9}];
var koArray = ko.observableArray(dummyArray);
koArray.sort(function(l,r) { return l.number === r.number ? 0 : l.number < r.number ? -1 : 1; });
console.log(koArray())<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
正如Knockout文档中的描述所告诉您的:
您的函数应该接受数组中的任意两个对象,如果第一个参数较小,则返回一个负值,如果第二个参数较小,则返回一个负值,或者将它们视为相等。
这是与Array.prototype.sort相同的行为
https://stackoverflow.com/questions/50994876
复制相似问题