假设我有一个对象数组(为了更简单的显示目的,我只是将它显示为一个数组)
[ '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
。在那种情况下,我将它放在一边,并在返回之前追加到这个新数组的最后。必须有一种更好,更有效的方法。
谢谢。
答案 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;
}
});