JavaScript:异常排序

JavaScript:异常排序,javascript,Javascript,假设我有一个对象数组(为了更简单的显示目的,我将它显示为一个数组) [‘测试’、‘新’、‘阿尔法’、‘动物园’、‘随便什么’] 我需要按字母顺序对它进行排序(简单的部分),然而,我需要以某种方式对它进行排序,即某个单词,比如说NEW,将以最末尾结束 ['ALPHA','TEST','WHATEVER','ZOO','NEW'] 下面是我使用的排序函数 var sortedWords = function(a, b) { return a.word > b.word ? 1 : -1

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

[‘测试’、‘新’、‘阿尔法’、‘动物园’、‘随便什么’]

我需要按字母顺序对它进行排序(简单的部分),然而,我需要以某种方式对它进行排序,即某个单词,比如说
NEW
,将以最末尾结束

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

下面是我使用的排序函数

var sortedWords = function(a, b) {
    return a.word > b.word ? 1 : -1 ;
};
因此,我得到sortedWords数组,然后再检查一遍,创建另一个数组并将单词放入新数组,除非单词等于
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;
}
功能(a、b){
如果((a.word=='NEW')!=(b.word=='NEW')){
返回a.word==='NEW'?1:-1;
}
返回a.word>b.word?1:
a、 单词
您可以如下定义比较器功能:

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);
};


返回前:
if(a=='youWord'){return 1;}
@BrianHannay将此作为答案发布@BrianHannay记得如果
a
b
都是目标词,那么结果必须是0。你能解释一下这是一个答案而不是评论吗?@Blender:当时我还没有粘贴我的小提琴代码。谢谢,克里斯!这正是我所需要的,但显然我必须等7分钟才能接受这个答案:)@solefall你能检查一下吗?也许我错过了什么。@Antonis:是的。由于您正在对平面数组进行排序(我对对象数组进行排序),因此需要将
a.word
更改为
a
,将
b.word
更改为
b
@solefald这不是提交的代码。最初的代码不起作用。@Antonis:在我最初的问题中?请看第一行。我提到,出于简单的显示目的,我将显示它是一个平面阵列。Chris的解决方案在我的情况下效果很好,显然需要进行一些调整以匹配我的对象元素名称和匹配的单词。
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; 
    }
});