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
如何排序数组数组呢?
正如我在评论中所说,该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)
它首先尝试寻找两个数组的公共长度的差异.如果公共长度完全相同,则根据数组长度进行排序.这是一个工作小提琴.