使用Javascript对数组数组进行排序

cke*_*sch 6 javascript sorting numbers

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

X = [ [1,2,3,4],
      [1,1,2,3],
      [1,1,3],
      [1,4],
      [2,1,2],
      [2,2]
    ]
Run Code Online (Sandbox Code Playgroud)

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

[ [1,1,2,3],
  [1,1,3],
  [1,2,3,4],
  [1,4],
  [2,1,2],
  [2,2]
]
Run Code Online (Sandbox Code Playgroud)

这就是我想要的.问题是用于比较数组中元素的比较运算符是词典,因此[10,2] < [2,2],例如,

[[10,2],[1,1,3],[2,2]].sort() -> [[1,1,3],[10,2],[2,2]]
Run Code Online (Sandbox Code Playgroud)

我需要它以数字排序,以便我得到一个排序数组[[1,1,3],[2,2],[10,2]].

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

如何排序数组数组呢?

Rik*_*tor 7

正如我在评论中所说,该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);
};
Run Code Online (Sandbox Code Playgroud)

它首先尝试寻找两个数组的公共长度的差异.如果公共长度完全相同,则根据数组长度进行排序.这是一个工作小提琴.