JavaScript:排序异常

时间:2013-06-22 19:29:39

标签: javascript

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

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

我需要按字母顺序(简单部分)对其进行排序,但是,我需要以某种方式对其进行排序,即某个单词,让我们说NEW将最终结束。

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

这是我用

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

所以,我得到sortedWords数组,然后重新遍历它,创建另一个数组并将单词推入新数组,除非单词等于NEW。在那种情况下,我将它放在一边,并在返回之前追加到这个新数组的最后。必须有一种更好,更有效的方法。

谢谢。

3 个答案:

答案 0 :(得分:3)

将比较器更改为首先查找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;
}

答案 1 :(得分: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);
};

答案 2 :(得分:1)

Use sort with a custom 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; 
    }
});