var myArray = [
'_aaaa_2013-09-25_ssss9.txt',
'_aaaa_2013-09-25_ssss8.txt',
'_aaaa_2013-09-26_ssss1.txt',
'_aaaa_2013-09-25_ssss10.txt',
'_aaaa_2013-09-26_ssss2.txt',
'_aaaa_2013-09-25_ssss13.txt',
'_aaaa_2013-09-25_ssss5.txt',
'_aaaa_2013-09-25_ssss6.txt',
'_aaaa_2013-09-25_ssss7.txt'
];
我需要按日期和数字对数组进行排序.
结果应该是
var result = [
'_aaaa_2013-09-25_ssss5.txt',
'_aaaa_2013-09-25_ssss6.txt',
'_aaaa_2013-09-25_ssss7.txt',
'_aaaa_2013-09-25_ssss8.txt',
'_aaaa_2013-09-25_ssss9.txt',
'_aaaa_2013-09-25_ssss13.txt',
'_aaaa_2013-09-26_ssss1.txt',
'_aaaa_2013-09-26_ssss2.txt'
];
我尝试了下面的代码.这将只按日期排序,但我需要按’.txt’之前的数字排序.我怎么能这样做.
myArray.sort(function (a, b) {
var timeStamp1 = a.substring(a.indexOf('_aaaa') + 6, a.indexOf('_ssss'));
var timeStamp2 = b.substring(b.indexOf('_aaaa') + 6, b.indexOf('_ssss'));
timeStamp1 = new Date(Date.UTC(timeStamp1[0], timeStamp1[1], timeStamp1[2]));
timeStamp2 = new Date(Date.UTC(timeStamp2[0], timeStamp2[1], timeStamp2[2]));
return (timeStamp1 > timeStamp2) ? 1 : (timeStamp2 > timeStamp1 ? -1 : 0);
});
最佳答案 你可以这样做:
var re = /^_aaaa_(\d\d\d\d-\d\d-\d\d)_ssss(\d+)\.txt$/;
var result = myArray.slice().sort( function( a, b ) {
var aa = a.match(re), bb = b.match(re);
return(
aa[1] < bb[1] ? -1 :
aa[1] > bb[1] ? 1 :
aa[2] - bb[2]
);
});
注意使用.slice()来创建数组的副本.如果要对原始数组进行排序,可以省略此项. (感谢@DerFlatulator提醒!)