我有以下数组:

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' 不是字符串。但是,我不明白为什么会这样。

最佳答案

在对数组进行排序时,sort 函数采用的参数是数组元素。
在你的情况下,你的数组元素也是数组......无赖。
您想按每个元素的第一个元素对数组数组进行排序(棘手)。
所以只需将 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 因为 replace 是一个 String 方法并且你试图将它应用到一个 Array

关于Javascript:将包含日期的数组按降序排序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6178671/

10-09 07:28
查看更多