你如何在JavaScript中对多维数组进行排序?
我有一个包含两个日期和一个字符串的数组,里面又包含很多个这样的数组。我需要按照其中一个日期数组来对主数组进行排序,这可能吗?
数据结构:
events = [
{ date 1, date 2, string },
{ date 2, date 2, string },
]
你如何在JavaScript中对多维数组进行排序?
我有一个包含两个日期和一个字符串的数组,里面又包含很多个这样的数组。我需要按照其中一个日期数组来对主数组进行排序,这可能吗?
数据结构:
events = [
{ date 1, date 2, string },
{ date 2, date 2, string },
]
重复问题,参见sort outer array based on values in inner array, 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
这将按索引2进行排序
从你的描述来看,数组结构似乎有些模糊不清。你可以使用自定义排序函数来比较元素并进行排序。
假设该结构为:
var data = [
[date11, date12, string],
[date21, date22, string],
[date31, date32, string],
...
];
a[0]
和b[0]
来比较两个嵌套数组中的第一个项目(假设它是你要排序的日期)。此外,假设a[0]和b[0]已经是日期对象——如果它们还不是日期对象,您可能需要创建日期对象。function sortByDate(a, b) {
return a[0].getTime() - b[0].getTime();
}
data.sort(sortByDate);
return a[0].getTime() - b[0].getTime()
,因为比较器应该根据 (a<b, a==b, a>b) 返回 (负数, 零, 正数),对吧? - maerics这个例子是用于按数字(和日期)或字符串对数组进行排序。
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))
根据传递的索引进行排序。
如果每个数组中该索引处的项目匹配,则按照传递的下一个索引进行排序(如果有的话)。
只要项目匹配且还有更多参数,就可以继续进行排序。
您不需要指定多个索引以进行排序。
a.deepsort(0);
a.deepsort(2);