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