参考这个问题Sort json array
我使用ajax获得以下JSON字符串,并将该对象存储为数组:
var homes = [
{
"h_id":"3",
"city":"Dallas",
"state":"TX",
"zip":"75201",
"price":"162500",
"start_time":"2011-01-26 08:00:00",
"end_time":"2011-01-26 05:00:00"
},
{
"h_id":"4",
"city":"Bevery Hills",
"state":"CA",
"zip":"90210",
"price":"319250",
"start_time":"2011-01-26 12:00:00",
"end_time":"2011-01-26 05:00:00"
},
{
"h_id":"5",
"city":"New York",
"state":"NY",
"zip":"00010",
"price":"962500",
"start_time":"2011-01-28 08:00:00",
"end_time":"2011-01-26 05:00:00"
}
];
如何创建一个函数来对ASC中的“start_date”字段进行排序,并仅使用JavaScript对DESC排序进行排序?
我使用 Triptych
建议的以下功能var sort_by = function(field, reverse, primer){
reverse = (reverse) ? -1 : 1;
return function(a,b){
a = a[field];
b = b[field];
if (typeof(primer) != 'undefined'){
a = primer(a);
b = primer(b);
}
if (a<b) return reverse * -1;
if (a>b) return reverse * 1;
return 0;
}
}
并以下面的方式申请
// Sort by start_time
homes.sort(sort_by('start_time', false, function(a){return a.getTime()}));
但没有工作...... :((给出这个错误
a.getTime is not a function
提前致谢
注意:抱歉复制相同 问题...
答案 0 :(得分:1)
正如我在评论中所说,字符串没有getTime()
方法。只有Date
个对象。因此,您必须将日期字符串转换为Date
对象。将您的功能更改为:
function(a){return (new Date(a)).getTime()}
现在,有Date
的各种实现,我认为只有较新的实现支持解析这种日期字符串(不确定)。也许你必须首先解析字符串并将单个值传递给Date
:
function(a){
var parts = a.match(/(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/);
var date = new Date(parts[1], parts[2], parts[3], parts[4], parts[5], parts[6]);
return date.getTime()}
}
参考:Date
答案 1 :(得分:1)
(将我的评论与正确答案相结合)
如果您的日期都采用该格式,那么您只需按正常的字符串比较进行排序即可。在这种情况下,这意味着你可以放弃底漆:
homes.sort(sort_by('start_time', false));
答案 2 :(得分:0)
升序排序:
var sortAscending = function(a, b) {
var aDate = new Date(a["start_time"]);
var bDate = new Date(b["start_time"]);
return aDate.getTime() - bDate.getTime();
}
homes.sort(sortAscending)
降级排序:
var sortDescending = function(a, b) { return -1 * sortAscending(a, b); }
homes.sort(sortDescending);
这也是降序排序:
var sortDescending = function(a, b) { return sortAscending(b, a); }
正如其他人所提到的,日期的字符串表示是按字典顺序排序的,这意味着可以避免整个日期解析步骤。使用String.localeCompare
sortAscending
函数可以写成:
var sortAscending = function(a, b) {
return a["start_time"].localeCompare(b["start_time"]);
}