对字母数字数组进行排序

时间:2014-12-19 10:42:11

标签: javascript arrays sorting

我有一个包含数字和字符串的数组:

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

2 个答案:

答案 0 :(得分:3)

回调函数根据值的比较返回正值或负值。只需更改返回的-11值的符号:

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