Knockout sort - 最后一个空值

时间:2015-11-27 12:50:32

标签: javascript knockout.js

我有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/

感谢。

1 个答案:

答案 0 :(得分:1)

在你的小提琴中试试这个:

if (a.number == null && b.number){
    return 1;
}
if (b.number == null && a.number){
    return -1;
}

如果a.number == nullb.number == null比较名称。如果只有其中一个为空,则会在列表中向下移动它们。