Javascript:排序包含日期降序的数组

时间:2011-05-30 16:30:39

标签: javascript arrays sorting

我有以下数组:

var times = [
            ["04/11/10", "86kg"], 
            ["05/12/11", "90kg"],
            ["06/12/11", "89kg"]
];

我想按升序列出这些日期及其相应的权重。

我知道您可以使用 sort 对数组进行排序,我从this About.com page找到了以下函数,我认为它可以做我想要的:

times.sort(dmyOrdA);
var dateRE = /^(\d{2})[\/\-](\d{2})[\/\-](\d{2})/;
function dmyOrdA(a,b) {
    a = a.replace(dateRE, "$3$2$1");
    b = b.replace(dateRE, "$3$2$1");

    if (a > b) {
        return 1;
    }

    else if (a < b) {
        return -1;
    }

    else {
        return 0;
    }
}

但是,使用此功能会出现以下错误:

a.replace is not a function

是否有人能够帮助我查询?

提前致谢。

编辑:

查看之前的stack overflow question,似乎在我的情况下'a'不是字符串。但是,我不明白为什么会这样。

2 个答案:

答案 0 :(得分:3)

排序数组时,sort函数所采用的参数是数组元素 在你的情况下,你的数组元素也是数组... bummer 您希望按每个元素的第一个元素对数组进行排序(棘手) 所以只需将ab更改为a[0]b[0]

function dmyOrdA(a,b) {
    a = a[0].replace(dateRE, "$3$2$1");
    b = b[0].replace(dateRE, "$3$2$1");
    if (a > b)
        return 1;
    else if (a < b)
        return -1;
    else
        return 0;
}

您获得了a.replace is not a function,因为替换是一种String方法,您尝试将其应用于Array

答案 1 :(得分:0)

您应该转换为正确的日期,然后在比较函数中减去:

function dmyOrdA(a,b){return myDate(a[0]) - myDate(b[0]);}
function myDate(s){var a=s.split("/"); return new Date("20"+a[2],a[1]-1,a[0]);}