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

4

这是一个非常基础的问题,在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]
]];

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

到目前为止,我已经得到了:

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

我理解 .sort() 是按字典顺序进行排序的; 因此我需要传递自己的函数来排序; 但是这个函数并不完全符合我的需求。


2
这不是一个嵌套数组,而是一个包含单个对象的数组,该对象具有0-9属性,这些属性是数组。在JavaScript中,对象键无法排序。您可能需要将api响应解析为真正的数组。 - IrkenInvader
1
Array.prototype.sort 回调函数应返回一个整数,通常在 -11 的范围内。而你返回了一个布尔值。 - Phil
1
请展示预期输出的样子。 - brk
你的示例代码现在不再是有效的JavaScript了。你实际上有什么? - Phil
再次更新... 当我打印到控制台时,这正是我所看到的。 - Will
1个回答

8

您需要访问第一个数组条目(因为只有一个),然后使用每个条目的第一个数组项,使用标准数字比较器 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,则按照比较函数的返回值对数组元素进行排序。如果正在比较的两个元素是ab,则:

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

谢谢。我道歉。我之前错误地描述了我的数据集。它是一个数组的数组。 - Will

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接