JavaScript:排序异常
JavaScript: Sorting with exception
假设我有一个对象数组(为了更简单的显示目的,我只将其显示为数组)
[ '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
。在这种情况下,我把它放在一边,并在返回它之前将其附加在这个新数组的最后。必须有一种更好、更有效的方法来做到这一点。
谢谢。
更改比较器以首先查找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;
}
使用带有自定义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;
}
});
您可以如下定义比较器函数:
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);
};
使用lodash
有一种更简单的方法,它可以扩展到更复杂的场景,同时保持代码的简单性。
const strings = [ 'TEST', 'NEW', 'ALPHA', 'ZOO', 'WHATEVER' ];
_.sortBy(strings, [
(string) => string !== 'NEW',
(string) => string
])
相关文章:
- JavaScript数组排序(函数)用于对表行进行排序,而不是排序
- 使用promise和mongoose对文档进行排序
- Selectize.js:如何对整数值的选项进行排序
- Javascript排序的图像弹出窗口..可以't单独弹出
- 如何通过引用var Using DataTables来进行分页或排序
- 为什么HTML5拖放的目标是孩子?(可排序列表)
- AngularJs对所有页面中的所有记录进行排序
- 当属性不一致时,如何根据属性对JS对象列表进行排序
- 按从高到低对多个int变量进行排序
- jQuery UI可排序-多连接列表拖动
- Javascript排序字符串或数字
- 2个backbone.js集合,具有相同的模型,但排序顺序不同
- sort而不是排序javascript
- 通过从节点父级获取所有子级对节点进行排序(获取子级数组)
- 在Javascript中对具有特定异常的对象数组进行排序
- SSJ - 不可排序的异常
- jquery可排序ui异常
- JavaScript升序排序出现异常
- JavaScript:排序异常
- 在$.getJSON异常之后对JSON数组进行排序