如果数组超过10个项目,Javascript按子阵列中的值排序数组

时间:2018-02-26 02:16:21

标签: javascript arrays sorting

我有一个包含子数组的数组,希望通过子数组中的第一项以数字方式排序。

使用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应该在数组的中间,而不是在顶部。

知道为什么会这样吗?感谢。

2 个答案:

答案 0 :(得分:1)

Here's the documentation for Array.prototype.sort.您当前的代码返回一个布尔值。相反,该函数应返回一个数字,a之前的数字小于零bb之前的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])