【问题标题】:Javascript multidimentional array sorting by numerical orderJavascript多维数组按数字顺序排序
【发布时间】:2011-11-09 19:27:20
【问题描述】:

我有一个二维数组,我需要对它进行数字排序。这是数组的一个示例:

   [0]    [1]
    3     320
    55B   250
    26    100
    55A   260
    56    310
    89    420

我需要按 [0] 值进行数字排序。这些值存储为字符串。我已经想出了如何按字母和数字对数组进行排序,但由于偶尔会出现 A 和 B,我无法弄清楚如何对这个数组进行排序。

【问题讨论】:

  • 我理解对了吗,数组是这样的: [ [3, 320], ["55B", 250], 26, 100] ] 而不是 [ [3, "55B", 26], [320, 250, 100] ] ?
  • 您能否更具体地描述一下您希望如何对值进行排序?现在这一切似乎有点武断。有什么限制?换句话说,字母总是出现在左起第三个位置吗?类似的东西。
  • 据我了解,他知道如何排序,但他不知道如何对末尾带有“A”和“B”的数字进行排序......
  • @AdamJurczyk 基本上就是这样......

标签: javascript multidimensional-array sorting


【解决方案1】:

parseInt 方法将忽略数字后面的任何字符串字符,删除 A 和 B。

arr.sort(function(rowA, rowB){
    var a = parseInt(rowA[0], 10);
    var b = parseInt(rowB[0], 10);

    if (a > b)
        return 1;
    else if (a < b)
        return -1;
    return 0;
});

【讨论】:

  • arr.sort(function (a, b) { return parseInt(a[0], 10) - parseInt(b[0], 10); });
【解决方案2】:

请注意 - 如果这个 AB 与排序无关,那么就像 Zack 发布的那样使用 parseInt

但如果它应该用于排序,你可以使用这样的东西:

arr.sort(function(l,r){
  var vl = l[0].split(/(\d+)(\D*)/),
      vr = r[0].split(/(\d+)(\D*)/);

  vl[1] = parseInt(vl[1]);
  vr[1] = parseInt(vr[1]);

  if(vl[1] < vr[1]){
    return -1;
  }else if(vl[1] === vr[1]){
      if(vl[2] < vr[2]) return -1;
      else if(vl[2] === vr[2]) return 0;
      else return 1;
  }else{
      return 1;
  }
}); 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多