【问题标题】:Sort an array of arrays by the first elements in the nested arrays按嵌套数组中的第一个元素对数组数组进行排序
【发布时间】:2018-07-16 00:57:02
【问题描述】:

这是一个非常基本的问题,我可以在几秒钟内用 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() 是字典式的;所以我需要传递我自己的函数来对其进行排序;但是这个功能并没有完全做到这一点。

【问题讨论】:

  • 这不是一个嵌套数组,它是一个包含单个对象的数组,该对象的属性 0-9 是数组。在 javascript 对象键中不能排序。您可能希望将 api 的响应解析为真正的数组。
  • Array.prototye.sort 回调应该返回一个整数,通常在-11 的范围内。您正在返回一个布尔值
  • 请显示预期输出的样子
  • 您的示例代码现在不再是有效的 JavaScript。你实际上有什么?
  • 再次更新...当我打印到控制台时,这正是我所看到的。

标签: javascript arrays sorting multidimensional-array


【解决方案1】:

您需要访问第一个数组条目(因为您只有一个),然后使用标准数字比较器使用每个条目的第一个数组项访问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) 必须始终返回相同的值。如果返回不一致的结果,则排序顺序未定义。

【讨论】:

  • 谢谢。我道歉。我在上面歪曲了我的数据集。它是一个数组数组。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-29
  • 1970-01-01
  • 2011-02-07
  • 1970-01-01
  • 2017-05-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多