在javascript中对多维数组排序

在javascript中对多维数组排序,javascript,arrays,multidimensional-array,Javascript,Arrays,Multidimensional Array,如何在JavaScript中对多维数组进行排序 我有一个包含两个日期和一个字符串的数组。我需要按日期数组之一排序的主数组,这可能吗 数据结构: events = [ { date 1, date 2, string }, { date 2, date 2, string }, ] 从您的描述来看,数组结构似乎有点模糊。您可以使用自定义排序函数来比较元素并进行排序 假设结构为: var data = [ [date11, date12, string], [date21,

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

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

数据结构:

events = [
 { date 1, date 2, string },
 { date 2, date 2, string },
 ]

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

假设结构为:

var data = [
    [date11, date12, string],
    [date21, date22, string],
    [date31, date32, string],
    ...
];
如果使用对象而不是嵌套数组,则不需要使用数字索引。这里使用
a[0]
b[0]
比较两个嵌套数组中的第一项(假设它是您要排序的日期)。另外,假设a[0]和b[0]已经是日期对象,如果它们还没有创建日期对象,则可能需要创建它们

更新:感谢@maerics指出这一点。比较器的返回值需要是[ab]值对应的[负,0,正]

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

data.sort(sortByDate);

此示例用于按数字(和日期)或字符串对数组进行排序

Array.prototype.deepsort= function(){
    var i, order= arguments, L= order.length, tem;
    return this.sort(function(a, b){
        i= 0;
        while(i < L){
            tem= order[i++];
            var ao= a[tem] || 0, bo= b[tem] || 0;
            if(ao== bo) continue;
            return ao> bo? 1: -1;
        }
        return 0;
    });
}

var a= [ [ 'z', 1, 0 ], [ 'a', 0, 1 ],['m',-1,10] ,['a','1',-1]];

alert(a.deepsort(0,1,2)+'\n\n'+a.deepsort(2,0,1)) 
副本 在这里你会找到几个答案,就像我自己的答案一样

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
var arr=[…]
arr.sort((函数(索引){
返回函数(a,b){
返回(a[index]==b[index]?0:(a[index]

这在索引2上排序

您可能是指
返回a[0]。getTime()-b[0]。getTime()
因为比较器应该根据if(ab)返回(neg,zero,pos),对吧?使用getTime()没有意义。a-b将导致在后台使用a.valueOf()和b.valueOf(),这将返回在Chrome中非常好的unix timeWorks“this.sort”在Firefox中抛出了一个错误。+1我知道这是一篇老文章,但这是一个很棒的答案,它帮助我解决了我自己制作的自定义表排序插件的一个问题:)
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