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()是词典的; 所以我需要传递自己的函数来对它进行排序; 但是这个功能并没有那么做.
您将要访问第一个数组条目(因为您只有一个),然后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函数的返回值对数组元素进行排序.如果
a和b是两个元素进行比较,那么:
- 如果
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)当给定一对特定元素a并b作为其两个参数时,必须始终返回相同的值.如果返回不一致的结果,则排序顺序未定义.