我有一个包含数字和字符串的数组:
disorderedArray = ["74783 Banana", "38903 Orange", "94859 Apple"];
我需要按编号按升序排列。我找到了一个适用于降序Sort Alphanumeric String Descending的示例 但是,我似乎无法更改返回线以使数组升序。我试着把arr.reverse();在返回线之后,但这看起来有点hackish并且它无论如何都不起作用。我也改变了>和<返回行中的符号,但我开始得到疯狂的结果。
function sort() {
var arr=disorderedArray;
arr.sort(function(a,b){
a=a.split(" ");
b=b.split(" ");
var an=parseInt(a[0],10);
var bn=parseInt(b[0],10);
return an<bn?1:(an>bn?-1:(a[1]<b[1]?-1:(a[1]>b[1]?1:0)));
arr.reverse();
});
console.log(arr);
}
答案 0 :(得分:3)
回调函数根据值的比较返回正值或负值。只需更改返回的-1
和1
值的符号:
return an<bn?-1:(an>bn?1:(a[1]<b[1]?1:(a[1]>b[1]?-1:0)));
这是一种更易读的写法:
return (
an < bn ? -1 :
an > bn ? 1 :
a[1] < b[1] ? 1 :
a[1] > b[1] ? -1 :
0
);
请注意,原始代码将数字部分降序排序,字符串的其余部分按升序排序,因此情况正好相反。前两个比较中的值确定数字部分的排序方式,后两个比较确定其余字符串的排序方式,因此您可以调整它们以获得所需的组合。
答案 1 :(得分:2)
sort的功能只是排序。你需要在排序的数组上调用reverse。
function sort() {
var arr = disorderedArray;
arr.sort(function(a, b) {
a = a.split(" ");
b = b.split(" ");
var an = parseInt(a[0], 10);
var bn = parseInt(b[0], 10);
return an < bn ? 1 : (an > bn ? -1 : (a[1] < b[1] ? -1 : (a[1] > b[1] ? 1 : 0)));
});
console.log(arr.reverse());
}