Я пытаюсь сортировать очки команд в порядке убывания, и я не понимаю, почему мой сорт не работает?Сортировка очков в порядке убывания в 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/), если вы не переключите '<' вокруг (хотя в целом я бы рекомендовал не возвращать true/false из функции сравнения на самом деле, но вместо этого вместо этого лучше вернуться, например, 'right.rank() - left.rank()'). – Jeroen
О, да, я не проверил это сравнение, это обеспечит восходящий порядок: D предоставил редактирование уже. – Adrian