我想按降序对球队的积分进行排序,但我不明白为什么我的排序不起作用?在knockoutjs中按降序排列总分
https://jsfiddle.net/cjm2o08n/4/
<!-- ko foreach: teams -->
<span data-bind="text: name"></span> <span data-bind="text: points"></span>
<br/>
<!-- /ko -->
function Point(label, value) {
var self = this;
self.label = ko.observable(label);
self.value = ko.observable(value);
}
function Team(name) {
var self = this;
self.name = ko.observable(name);
self.rank = ko.observable(0);
self.points = ko.observable(0);
}
function AppViewModel() {
var self = this;
self.teams = ko.observableArray([
new Team('red'),
new Team('blue'),
new Team('yellow'),
new Team('green'),
]);
self.points = ko.observableArray([
new Point('1st', 20),
new Point('2nd', 10),
new Point('3rd', 5)
]);
self.tester = function() {
ko.utils.arrayForEach(self.teams(), function(team) {
//get team ranking and then find it in points
team.points(
self.points()[team.rank() - 1].value()
)
});
//sort by highest points
self.teams(
self.teams().sort(function(left, right) {
return left.points == right.points ? 0 : (left.points < right.points ? 1 : -1)
})
);
};
}
var vm = new AppViewModel();
ko.applyBindings(vm);
vm.teams()[0].rank(2);
vm.teams()[1].rank(1);
vm.teams()[2].rank(3);
vm.teams()[3].rank(4);
vm.tester();
你最后的建议[行不通](https://jsfiddle.net/54v4y4d1/),除非你切换'<'左右(不过一般我会建议不返回真/假从比较功能在所有情况下,只是一个数字;更好的返回例如'right.rank() - left.rank()')。 – Jeroen
哦,是啊,我没有检查过这个比较,那个会提供升序:D已经提供了一个编辑。 – Adrian