3

假设我有一个对象数组(为了更简单的显示目的,我将其显示为一个数组)

[ 'TEST', 'NEW', 'ALPHA', 'ZOO', 'WHATEVER' ]

我需要按字母顺序对它进行排序(简单的部分),但是,我需要以某种方式对它进行排序,让我们说某个单词NEW最终会出现在最后。

[ 'ALPHA', 'TEST', 'WHATEVER', 'ZOO', 'NEW' ]

这是我排序的功能

var sortedWords = function(a, b) {
    return a.word > b.word ? 1 : -1 ;
};

所以,我得到了 sortedWords 数组,然后再次检查它,创建另一个数组并将单词推入新数组,除非单词 equals NEW。在这种情况下,我将它放在一边,并在返回它之前附加到这个新数组的最后。必须有更好、更有效的方法来做到这一点。

谢谢你。

4

3 回答 3

5

更改比较器以NEW首先查找:

function (a, b) {
    if ((a.word === 'NEW') != (b.word === 'NEW')) {
        return a.word === 'NEW' ? 1 : -1;
    }
    return a.word > b.word ? 1 :
           a.word < b.word ? -1 : 0;
}
于 2013-06-22T19:32:59.963 回答
2

您可以按如下方式定义比较器功能:

var sortedWords = function(a, b) {
    if (a.word === b.word) {
        // a and b are considered equal, the order is okay
        return 0;   
    }

    if (a.word === "NEW") {
        // "NEW" is considered larger than every other value, the order is wrong
        return 1;
    }

    // Correct order if b equals "NEW", otherwise lexicographical comparison
    return b.word === "NEW" ? -1 : (a.word > b.word ? 1 : -1);
};
于 2013-06-22T19:33:08.823 回答
1

将 sort 与自定义 compareFunction 一起使用

var ar = [ 'ALPHA', 'WHATEVER', 'NEW', 'ZOO', 'TEST' ];

ar.sort(function(a, b){
    var wordToBeLast = 'NEW';  // set your word here

    if(a===wordToBeLast){
        return 1;
    } else if(b===wordToBeLast){
        return -1;
    } else {
        return a > b; 
    }
});
于 2013-06-22T19:47:00.077 回答