在javascript中对多维数组进行排序

Kyl*_*iss 6 javascript arrays multidimensional-array

你会如何在JavaScript中对多维数组进行排序?

我有一个包含两个日期和一个字符串的数组.我需要按其中一个日期数组排序的主数组,这可能吗?

数据结构:

events = [
 { date 1, date 2, string },
 { date 2, date 2, string },
 ]
Run Code Online (Sandbox Code Playgroud)

Sea*_*sey 15

重复的基础上在内部数组值排序外阵列,javascript中 你会发现这里几个答案,像我自己

var arr = [.....]
arr.sort((function(index){
    return function(a, b){
        return (a[index] === b[index] ? 0 : (a[index] < b[index] ? -1 : 1));
    };
})(2)); // 2 is the index
Run Code Online (Sandbox Code Playgroud)

这在索引2上排序


Anu*_*rag 5

从你的描述来看,数组结构似乎有点模糊。您可以使用自定义排序函数来比较元素并进行排序。

假设结构为:

var data = [
    [date11, date12, string],
    [date21, date22, string],
    [date31, date32, string],
    ...
];
Run Code Online (Sandbox Code Playgroud)

如果您有对象而不是嵌套数组,则不需要使用数字索引。这里a[0]b[0]用于比较两个嵌套数组中的第一项(假设它是您要排序的日期)。此外,假设 a[0] 和 b[0] 已经是 Date 的对象 - 如果尚未创建 Date 对象,您可能需要创建它们。

更新:感谢@maerics 指出这一点。比较器的返回值需要是 [negative, 0, positive] 对应于 [a < b, a == b, a > b] 值。

function sortByDate(a, b) {
    return a[0].getTime() - b[0].getTime();
}

data.sort(sortByDate);
Run Code Online (Sandbox Code Playgroud)

  • 你可能的意思是`return a[0].getTime() - b[0].getTime()` 因为比较器应该返回 (neg, zero, pos) 取决于 if (a&lt;b, a==b, a&gt;明亮的? (2认同)