我有一个带有下一个结构的JSON对象:
{
"matters": [
{
"title": "Systems",
"date": "23/08/2010",
"score": 5
},
....
]
}
我想用sort()
函数对这些数据进行排序。我可以使用score
字段来完成此操作,但我无法使用date
字段对其进行排序。这就是我目前使用的:
$.getJSON('js/data.json', function(data) {
// data now contains one node with all the matters
$.each(data, function(key, val) {
// val now contains one matter per nodes
val.sort(function (a,b) {
return
parseInt(a.date.substring(6,10)+a.date.substring(3,5)+a.date.substring(0,2)) -
parseInt(b.date.substring(6,10)+b.date.substring(3,5)+b.date.substring(0,2));
});
// Here I get the same array not sorted!
}
});
两个parseInt()
函数都返回一个具有以下格式的整数:
if date=="23/08/2010" => 20100823
我使用警报来检查我是否正确分割日期并且没问题。无论如何,我无法对数组进行排序。
我正在使用this JSON文件测试代码。
我做错了什么?
答案 0 :(得分:0)
以下是我如何实施排序的示例。我没有使用你的JSON文件,但你应该有可能得到这个想法:
var data = {
"matters": [{
"title": "Sistema de Procesamiento de Datos",
"date": "03/08/2011",
"score": 8
}, {
"title": "Programación I",
"date": "30/07/2010",
"score": 7
}, {
"title": "Elementos de Investigación Operativa",
"date": "07/08/2003",
"score": 10
}, {
"title": "Programación III",
"date": "05/08/2009",
"score": 10
}, {
"title": "Laboratorio de Computación III",
"date": "05/08/2010",
"score": 10
}]
};
$.each(data, function(key, val) {
val.sort(function (a, b) {
function date_to_int(d) {
var parts = d.split('/');
var day = parts[0];
var month = parts[1];
var year = parts[2];
day = (day.length < 2) ? '0' + day : day;
month = (month.length < 2) ? '0' + month : month;
year = (year.length < 3) ? '20' + year : year;
return year + month + day;
}
return date_to_int(a.date) - date_to_int(b.date);
});
});
console.log(data);
JSFiddle可以在这里找到:http://jsfiddle.net/bjarkehs/TJNE6/2/
答案 1 :(得分:0)
如果您仔细查看我的代码,您会注意到return
有一个中断线,然后都是parseInt()
个功能。
有错误。该函数未返回正确的值。解决方案只是删除所有的breacklines并将所有return
语句保留在一行中。
错误代码:
return
parseInt(a.date.substring(6,10)+a.date.substring(3,5)+a.date.substring(0,2)) -
parseInt(b.date.substring(6,10)+b.date.substring(3,5)+b.date.substring(0,2));
代码正常工作:
return parseInt(a.date.substring(6,10)+a.date.substring(3,5)+a.date.substring(0,2)) - parseInt(b.date.substring(6,10)+b.date.substring(3,5)+b.date.substring(0,2));