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

Wil*_*ill 1 javascript arrays sorting multidimensional-array

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

我正在进行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]
]];
Run Code Online (Sandbox Code Playgroud)

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

到目前为止我有:

let ranges= unordered_ranges.sort(function (a, b) {
    return a > b
});
Run Code Online (Sandbox Code Playgroud)

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

Phi*_*hil 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)
Run Code Online (Sandbox Code Playgroud)


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

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

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