我在人员对象的淘汰赛中有一个可观察的数组。我希望能够根据姓氏对人员列表进行排序。问题是列表中有许多重复的姓氏。结果是,当有多个姓氏时,第一个名字会在找到时出现。我希望能够按姓氏对数组进行排序,当有多个姓氏时,也可以按名字排序。我正在使用文本输入让用户开始输入姓氏。结果绑定到显示所有匹配项的模板。
<input data-bind="value: filter, valueUpdate: 'afterkeydown'">
这是我的 Knockout 数组过滤器代码:
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