Javascript 按升序对周数和年进行排序

Javascript 按升序对周数和年进行排序,javascript,d3.js,Javascript,D3.js,是否可以按升序对具有特定格式的日期数组进行排序?格式包括年和周数,您可以在下面看到: 未排序数组的摘录: [“2014-03”、“2013-01”、“2013-02”、“2014-03”] 排序数组的所需结果: [“2013-01”、“2013-02”、“2014-03”] 我想使用一个比较函数来实现javascript和D3.js中的排序算法。尝试以下方法: var L = ["2014 - 03", "2013 - 01", "2013 - 02", "2014 - 03"] L.sort(

是否可以按升序对具有特定格式的日期数组进行排序?格式包括年和周数,您可以在下面看到:

未排序数组的摘录:

[“2014-03”、“2013-01”、“2013-02”、“2014-03”]

排序数组的所需结果:

[“2013-01”、“2013-02”、“2014-03”]


我想使用一个比较函数来实现javascript和D3.js中的排序算法。

尝试以下方法:

var L = ["2014 - 03", "2013 - 01", "2013 - 02", "2014 - 03"]
L.sort(function(a, b){ 
    var y1 = 1 * a.split(" - ")[0],
        y2 = 1* b.split(" - ")[0],
        m1 = 1 * a.split(" - ")[1],
        m2 = 1 * b.split(" - ")[1];
    if (y1 != y2) return d3.ascending(y1, y2);
    else return d3.ascending(m1, m2);
});
您可以使用内置函数对数组进行排序,这需要一个可选函数来比较一对元素。然后,您可以使用
d3.ascending
按年份升序排列元素,如果年份相同,则按月份升序排列元素

请注意,我不确定是否要删除重复的元素,就像您在示例中所做的那样。您可以在对数组排序之前或之后轻松执行此操作(请参阅):

[“2014-03”、“2013-01”、“2013-02”、“2014-03”].sort(函数(a,b){返回a.replace(/\D+/g,”)-b.replace(/\D+/g,”);)
L = L.filter(function(d, i){ return L.indexOf(d) == i; })