问题描述
||
我有以下数组:
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]);}