在 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/