我有以下数组:
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'不是字符串。但是,我不明白为什么会这样。
答案 0 :(得分:3)
排序数组时,sort
函数所采用的参数是数组元素
在你的情况下,你的数组元素也是数组... bummer
您希望按每个元素的第一个元素对数组进行排序(棘手)
所以只需将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
,因为替换是一种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]);}