通过嵌套数组中的第一个元素对数组数组进行排序

时间:2018-02-06 03:18:08

标签: javascript arrays sorting multidimensional-array

这是一个非常基本的问题,我可以在几秒钟内用Python完成 - 但我是Javascript的新手,也许我只是不知道该语言的命名法,但我的研究还没有#39;完全回答了。

我正在进行API调用;作为回应,我得到了:

let unordered_ranges = [[
    [1461913200000, 57, 69],
    [1380006000000, 75, 79],
    [1321344000000, 78, 79],
    [1276585200000, 69, 75],
    [1252998000000, 68, 76],
    [1234512000000, 79, 81],
    [1423814400000, 77, 78],
    [1489820400000, 69, 79]
]];

嵌套数组中的第一个元素是以毫秒为单位的时间戳。如何使用嵌套时间戳按时间顺序对父数组进行排序?

到目前为止,我已经:

let ranges= unordered_ranges.sort(function (a, b) {
    return a > b
});

我明白.sort()是词典的;所以我需要传递自己的函数来对它进行排序;但是这个功能并没有做到。

1 个答案:

答案 0 :(得分:5)

您将要访问第一个数组条目(因为您只有一个),然后使用标准数字比较器Array.prototype.sort()使用每个条目的第一个数组项。



let unordered_ranges = [[
    [1461913200000, 57, 69],
    [1380006000000, 75, 79],
    [1321344000000, 78, 79],
    [1276585200000, 69, 75],
    [1252998000000, 68, 76],
    [1234512000000, 79, 81],
    [1423814400000, 77, 78],
    [1489820400000, 69, 79]
]];

let ranges = unordered_ranges[0].sort((a, b) => a[0] - b[0])

console.info(ranges)




要解释比较器,最好阅读文档...

  

如果提供compareFunction,则根据compare函数的返回值对数组元素进行排序。如果ab是要比较的两个元素,那么:

     
      
  • 如果compareFunction(a, b)小于0,请将a排序为低于b的索引,即a首先出现。
  •   
  • 如果compareFunction(a, b)返回0,则ab相对于彼此保持不变,但相对于所有不同的元素进行排序。注意:ECMAscript标准不保证这种行为,因此并非所有浏览器(例如可追溯到至少2003年的Mozilla版本)都尊重这一点。
  •   
  • 如果compareFunction(a, b)大于0,请将b排序为低于a的索引,即b首先出现。
  •   当给定一对特定元素compareFunction(a, b)a作为其两个参数时,
  • b必须始终返回相同的值。如果返回不一致的结果,则排序顺序未定义。
  •