У меня есть наблюдаемый массив в нокауте объектов человека. Я хотел уметь сортировать список лиц по фамилии. Проблема состоит в том, что в списке есть несколько дубликатов фамилий. В результате, когда имеется более одной фамилии, первые имена появляются по мере их нахождения. Я хотел бы иметь возможность сортировать массив по фамилии и, когда есть более одной фамилии, попробуйте также сортировать по имени. Я использую текстовый ввод для пользователя, чтобы начать вводить фамилию. Результаты привязаны к шаблону, который отображает все совпадения.
<input data-bind="value: filter, valueUpdate: 'afterkeydown'">
И вот мой фильтр фильтра для нокаута:
function Item(firstname, lastname) {
this.firstname = ko.observable(firstname);
this.lastname = ko.observable(lastname);
}
var playersViewModel = {
items: ko.observableArray([]),
filter: ko.observable("")
};
var players;
$(function() {
playersViewModel.filteredItems = ko.computed(function() {
var filter = this.filter().toLowerCase();
if (!filter) {
return this.items();
} else {
return ko.utils.arrayFilter(this.items(), function(item) {
return ko.utils.stringStartsWith(item.lastname().toLowerCase(), filter);
});
}
}, playersViewModel);
$.getJSON('./players.json', function(data) {
players = data.players;
playersViewModel.players = ko.observableArray(players);
ko.applyBindings(playersViewModel);
var mappedData = ko.utils.arrayMap(players, function(item) {
return new Item(item.firstname,item.lastname);
});
playersViewModel.items(mappedData);
});
});
Для фильтрации имени это прекрасно работает, но я не могу найти способ добавить в сортировку имя, когда есть дубликаты фамилий. Например, в моем массиве при сортировке по имени я получаю:
Joe Bailey
Jack Brown
Adam Brown
Bob Brown
Jim Byrd
Я хотел бы, чтобы имена повторяющихся имен также отсортировались по именам:
Joe Bailey
Adam Brown
Bob Brown
Jack Brown
Jim Byrd