javascript - javascript中的自定义排序
问题描述
我正在尝试实现自定义sort
功能。我有这些规则:
['B', 'A'] => will become ['A', 'B']
['2', '1'] => will become ['1', '2']
['Down', 'Up'] => will become ['Up', 'Down']
因此,如果有数字或字符串,我想按升序对它们进行排序,但如果我有关键字Up/Down
,我想Up
先,然后Down
。
这是我迄今为止尝试过的:
let c = [
{
pos: 'Down',
},
{
pos: 'Up',
},
];
c.sort(function (a, b) {
console.log(a.pos) // why is this 'Up' and not 'Down'?
if (a.pos === 'Down' && b.pos === 'Up') {
console.log('enter on 1');
return 1;
} else {
if (a.pos > b.pos) {
console.log('enter on 2');
return 1;
}
}
console.log('enter on 3');
return -1;
});
console.log(c); // expected result [{pos: 'Up'}, {'pos': 'Down'}]
我期待我的代码,enter on 1
但它进入了enter on 2
。那么为什么console.log(a.pos)
我得到Up
而不是Down
呢?
感谢您的时间!
解决方案
function mySort(arr) {
arr.sort(function (a, b) {
a = a.pos;
b = b.pos;
if (a==='up' && b==='down')
return -1;
if (b==='up' && a==='down')
return 1;
if (!(isNaN(a)))
return a-b;
return a.localeCompare(b);
});
return arr;
}
console.log(mySort([{pos:'Down'}, {pos:'Up'}]));
console.log(mySort([{pos:'B'},{pos:'X'},{pos:'A'}]));
console.log(mySort([{pos:12},{pos:56},{pos:2},{pos:0}]));
推荐阅读
- c# - MD5加密中的特殊字符
- xampp - 在 xampp 中将默认 Index.php 页面更改为“index.do”
- python - 无法从以下 html 代码中打印出 [0] 数据
- javascript - JS ECMA6 - 向后兼容的三元运算符
- java - 如何提高多线程的性能
- python - Python代码不断跳出while循环
- excel - 如何在 Mac 上访问 SQLite 数据库,因为 ADO 不能在 Mac 上运行?
- ios - 当应用程序在 ios 9 中处于 InActive 状态时如何处理静默推送通知?
- javascript - 使用AngularJs仅显示其子对象具有特定值的选定对象的那些行
- node.js - Express、Nodejs 将 Multer 用于不同的服务