我有一个类似于下面的observableArray
:
self.people = ko.observableArray([
{ firstName: 'Albert', lastName: 'Woods', number: 2 },
{ firstName: 'Barry', lastName: 'Vincent', number: 4 },
{ firstName: 'Jason', lastName: 'Xavier', number: null },
{ firstName: 'Dean', lastName: 'Zebekiah', number: 1 },
{ firstName: 'Marty', lastName: 'Woods', number: 5 },
{ firstName: 'Bill', lastName: 'Vincent', number: 3 },
{ firstName: 'Chris', lastName: 'Jordan', number: null },
{ firstName: 'Ed', lastName: 'Young', number: null },
{ firstName: 'Dave', lastName: 'Zebekiah', number: 5 }
]);
我根据两个值对其进行排序——number
,它不是唯一的,然后是lastname
(我知道这可以用简写写,为了可读性,我现在只是这样做):
self.people.sort(function (a, b) {
if (a.number == b.number) {
if (a.lastName < b.lastName) {
return -1;
} else if (a.lastName > b.lastName) {
return 1;
} else {
return 0;
}
} else {
if (a.number < b.inumberd) {
return -1;
} else if (a.number > b.number) {
return 1;
} else {
return 0;
}
}
});
这一切都很好,只是我希望所有number
值为null
的对象都是列表上的最后一个项目,而不是第一个。实现这一目标的最佳方式是什么?
我想我需要做以下事情:
if (a.number = null){
return 1;
}
if (b.number = null){
return 0;
}
但问题是它不再使用lastName
作为相关对象的辅助排序项。
这里有一个供参考的jsfiddle:http://jsfiddle.net/nimaek/7tsfdfxq/
谢谢。
试试这个:
if (a.number == null && b.number){
return 1;
}
if (b.number == null && a.number){
return -1;
}
如果是a.number == null
和b.number == null
,它将比较名称。如果其中只有一个为空,它将在列表中向下移动它们。