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

问题描述

|| 我有以下数组:
var times = [
            [\"04/11/10\",\"86kg\"],[\"05/12/11\",\"90kg\"],[\"06/12/11\",\"89kg\"]
];
我想按升序列出这些日期及其对应的权重。 我知道您可以使用sort对数组进行排序,我在About.com页面上发现了以下功能,该功能可以满足我的要求:
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
有人可以帮助我查询吗? 提前致谢。 编辑: 看上一个堆栈溢出问题,似乎在我的情况下'a'不是字符串。但是,我不明白为什么会这样。     

解决方法

        在对数组排序时,“ 3”函数采用的参数是数组元素。 在您的情况下,您的数组元素也是数组。 您要按每个元素的第一个元素(tricky)对数组的数组进行排序。 因此,只需将
a
b
更改为
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
,因为replace是
String
方法,并且您尝试将其应用于
Array
    ,        您应该转换为正确的日期,然后在比较函数中减去:
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]);}