我有一个包含子数组的数组,希望通过子数组中的第一项以数字方式排序。
使用sort()函数:
arr = [[2,'text'],[5,'text'],[1,'text'],[3,'text'],[6,'text'],[4,'text'],
[7,'text'],[9,'text'],[3,'text'],[1,'text'],[8,'text']];
arr.sort(function(a, b) {
return a[0] < b[0];
});
我发现如果数组包含少于10个子数组,则sort()函数运行良好。但是如果数组包含10个以上的子数组,则会出现问题。
在这种情况下,数组有11个项目,因此Chrome生成的结果为:
[4, "text"]
[8, "text"]
[9, "text"]
[7, "text"]
[6, "text"]
[5, "text"]
[3, "text"]
[3, "text"]
[2, "text"]
[1, "text"]
[1, "text"]
4应该在数组的中间,而不是在顶部。
知道为什么会这样吗?感谢。
答案 0 :(得分:1)
Here's the documentation for Array.prototype.sort.您当前的代码返回一个布尔值。相反,该函数应返回一个数字,a
之前的数字小于零b
,b
之前的a
更高,而0之前没有变化)。对于最大到最小的订单,请尝试这样做:
arr.sort(function(a, b) {
return b[0] - a[0];
});
答案 1 :(得分:0)
传递给sort
的函数应该返回一个数字,如果第一个值大于第二个值,则为正数; 0,如果它们相等则为0,如果小于,则为负数。所以这样做:
arr.sort(function(a, b) {
return b[0] - a[0];
});
或者更简单地说,在现代JS中:
arr.sort((a, b) => b[0] - a[0])