2015-08-14 69 views
1

我有下面的日期数组,我想按照扩展顺序进行排序。我试过但没有得到积极的结果。如何在JavaScript中对日期数组进行排序

var arr = [ [ '02/13/2015', 0.096 ], 
    [ '11/15/2013', 0.189 ], 
    [ '05/15/2014', 0.11 ], 
    [ '12/13/2013', 0.1285 ], 
    [ '01/15/2013', 0.12 ], 
    [ '01/15/2014', 0.11 ], 
    [ '02/14/2014', 0.11 ], 
    [ '03/14/2014', 0.11 ], 
    [ '01/15/2015', 0.096 ], 
    [ '07/15/2015', 0.096 ], 
    [ '04/15/2013', 0.12 ], 
    [ '04/15/2014', 0.11 ], 
    [ '05/15/2013', 0.12 ], 
    [ '06/14/2013', 0.12 ], 
    [ '06/16/2014', 0.11 ], 
    [ '07/15/2013', 0.12 ], 
    [ '07/15/2014', 0.11 ], 
    [ '03/16/2015', 0.096 ]] 

我的代码

arr.sort(function(a,b){ 
    return new Date(a[0][0]) - new Date(b[0][0]); 
}); 
+0

对于初学者来说,'A'是像'阵列['11 /二千零十三分之十五' ,0.189]''这样一个[0] [0]'将导致'” 1'..这仍然需要工作,但是因为'new Date(a [0])' - 例如'New Date('11/15/2013')' - 是不明确的行为。我推荐[Moment.js](http://momentjs.com/)来处理这种情况,但可以手动解析日期并使用'new Date(y,m,d)':没有短缺这样的例子当问如何将一个字符串变成日期 – user2864740

+0

如何*“正常”*创建日期,请参阅http://stackoverflow.com/questions/5619202/converting-string-to-date-in-js ,http://stackoverflow.com/questions/22184747/parse-string-to-date-with-moment-js等 – user2864740

回答

7

你正在服用的第一个字符的日期字符串,将它们转换为Date实例,并使用它们进行比较。

但是,您应该实际使用日期字符串,将它们转换为Date实例并进行比较。

arr.sort(function (a, b) { 
    return new Date(a[0]) - new Date(b[0]); 
}); 

输出

[ [ '01/15/2013', 0.12 ], 
    [ '04/15/2013', 0.12 ], 
    [ '05/15/2013', 0.12 ], 
    [ '06/14/2013', 0.12 ], 
    [ '07/15/2013', 0.12 ], 
    [ '11/15/2013', 0.189 ], 
    [ '12/13/2013', 0.1285 ], 
    [ '01/15/2014', 0.11 ], 
    [ '02/14/2014', 0.11 ], 
    [ '03/14/2014', 0.11 ], 
    [ '04/15/2014', 0.11 ], 
    [ '05/15/2014', 0.11 ], 
    [ '06/16/2014', 0.11 ], 
    [ '07/15/2014', 0.11 ], 
    [ '01/15/2015', 0.096 ], 
    [ '02/13/2015', 0.096 ], 
    [ '03/16/2015', 0.096 ], 
    [ '07/15/2015', 0.096 ] ] 
+0

FWIW,请参阅我对主帖的评论。将特定于语言环境的字符串传递给Date构造函数的错误定义的行为。 – user2864740

0

如果你想只通过日期排序是什么,我觉得这个代码将有助于:

arr.sort(function(a,b){return new Date(a[0]) - new Date(b[0]);}); 
1

从MDN Sorting with map重启发。对于更大的数据集很重要。

var arr = [ 
 
    ['02/13/2015', 0.096], 
 
    ['11/15/2013', 0.189], 
 
    ['05/15/2014', 0.11], 
 
    ['12/13/2013', 0.1285], 
 
    ['01/15/2013', 0.12], 
 
    ['01/15/2014', 0.11], 
 
    ['02/14/2014', 0.11], 
 
    ['03/14/2014', 0.11], 
 
    ['01/15/2015', 0.096], 
 
    ['07/15/2015', 0.096], 
 
    ['04/15/2013', 0.12], 
 
    ['04/15/2014', 0.11], 
 
    ['05/15/2013', 0.12], 
 
    ['06/14/2013', 0.12], 
 
    ['06/16/2014', 0.11], 
 
    ['07/15/2013', 0.12], 
 
    ['07/15/2014', 0.11], 
 
    ['03/16/2015', 0.096] 
 
]; 
 

 
// temporary array holds objects with position and sort-value 
 
var mapped = arr.map(function (el, i) { 
 
    var d = el[0].split('/'); 
 
    return { index: i, value: new Date(d[2], d[0] - 1, d[1]) }; 
 
}) 
 

 
// sorting the mapped array containing the reduced values 
 
mapped.sort(function (a, b) { 
 
    return +(a.value > b.value) || +(a.value === b.value) - 1; 
 
}); 
 

 
// container for the resulting order 
 
var result = mapped.map(function (el) { 
 
    return arr[el.index]; 
 
}); 
 

 
document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');

+0

为了历史的目的,这个月应该是0..11 – user2864740

+0

@ user2864740,你是对的。 –

相关问题