【问题标题】:Order multiple arrays of numbers订购多个数字数组
【发布时间】:2015-03-30 01:35:54
【问题描述】:

我有一个包含多个数字数组的数组,我想简单地对它们进行排序。

例如:

my_parent_array = [ [2, 6, 31],
                    [2, 3, 25],
                    [2, 6, 17, 2] ];  

它们都是正整数,每个子数组可以有很多值。

我需要对my_parent_array 进行排序/排序才能按顺序排列。

所以在上面的例子中,结果应该是这样的:

my_parent_array = [ [2, 3, 25],
                    [2, 6, 17, 2],
                    [2, 6, 31] ];  

我该怎么做?

谢谢。

编辑

此数组仅包含数字(不包含字符串或字母)。
我需要它首先按第一个值排序子数组,然后是第二个,等等。
它类似于按字母顺序排序,但这是数字数组而不是字母字符串。

我认为.sort() 不会成功,因为我正在处理子数组。
正如@amadan 指出的那样,一个简单的.sort() 是行不通的,因为如果我使用标准的.sort(),默认情况下10 会出现在2 之前。

那么是否有排序修饰符来执行此操作,或者我需要制作自己的排序算法?

谢谢。

【问题讨论】:

标签: javascript arrays sorting multidimensional-array


【解决方案1】:

为避免我在 cmets 中发布的问题(排序默认为字典顺序),引入您自己的比较器功能:

my_parent_array.sort(function(a, b) {
  var len = Math.min(a.length, b.length);
  for (var i = 0; i < len; i++) {
    if (a[i] < b[i]) return -1;
    if (a[i] > b[i]) return 1;
  }
  return a.length - b.length;
});

编辑:我一直在考虑极端情况...
编辑:我认为现在应该解决极端情况。

【讨论】:

  • 什么是“极端情况”?
  • 失败的例子;希望没有留下,但编辑历史将显示许多重写和调试迭代​​。当我最终确定最终版本时,我可能应该编辑掉这句话,但我忘记了(现在有 cmets 提到它,我可能不应该)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-10
  • 1970-01-01
  • 1970-01-01
  • 2016-08-12
相关资源
最近更新 更多