我想按降序對球隊的積分進行排序,但我不明白爲什麼我的排序不起作用?在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