javascript - 使用 Javascript 对数值数组的数组进行排序

标签 javascript sorting numbers

在 Javascript 中,如果我有一个数组数组,如下所示:

X = [ [1,2,3,4],
      [1,1,2,3],
      [1,1,3],
      [1,4],
      [2,1,2],
      [2,2]
    ]

Javascript 对我的数组进行排序,首先比较第一个条目,然后比较第二个条目,依此类推,因此 X.sort()返回以下内容:

[ [1,1,2,3],
  [1,1,3],
  [1,2,3,4],
  [1,4],
  [2,1,2],
  [2,2]
]

这就是我想要的。问题是用于比较数组中元素的比较运算符是字典顺序的,所以 [10,2] < [2,2] ,例如,

[[10,2],[1,1,3],[2,2]].sort() -> [[1,1,3],[10,2],[2,2]]

我需要它按数字排序,这样我就得到了 [[1,1,3],[2,2],[10,2]] 的排序数组.

我尝试使用 function(a,b){return (a-b) } 的比较函数,这适用于对数字数组进行排序,但这无法正确排序我的数组,这是有道理的(我认为),因为 [10,2] - [1,1,3]产量 NaN

如何对数值数组进行排序?

最佳答案

正如我在评论中所说,sort 函数需要考虑这样一个事实,即它接收数组作为参数而不是普通值。因此,您需要相应地处理它们。

我建议这样做;

var compFunc = function (a, b) {
    var len = a.length > b.length ? b.length : a.length;

    for(var i=0; i<len; ++i) {
        if(a[i] - b[i] !== 0)
            return a[i] - b[i];
    }

    return (a.length - b.length);
};

它首先尝试寻找两个数组的公共(public)长度的差异。如果公共(public)长度完全相同,则按数组长度排序。 Here's a working fiddle .

关于javascript - 使用 Javascript 对数值数组的数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15685843/

相关文章:

javascript - 滚动时如何重叠html正文中的部分?

javascript - 如何在 Angular Fire 中保存对象的属性而不删除其他属性?

javascript - 如何移动div中的重新定位元素

c# - 如何对字符串进行排序,以便首先搜索以搜索词开头的字符串?

r 将小数转换为小数

c# - 如何使用 C# 中的 KeyDown 事件使 TextBox 仅接收数字键值?

javascript - 变量未发布在 keyup 上

c++ - 创建通用模板类以按变量对不同类进行排序

javascript - 如何在 JavaScript 中按值对 map 进行排序?

java - 总和为 N 且逆数总和为 1 的所有自然数