0

我有一个具有下一个结构的 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

我使用警报来检查我是否正确分割了日期,这很好。无论如何,我无法对数组进行排序。

我正在使用这个JSON 文件测试代码。

我究竟做错了什么?

4

2 回答 2

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/

于 2013-08-19T00:36:13.690 回答
0

如果您仔细查看我的代码,您会注意到return有一个断线,然后是两个parseInt()函数。

有错误。该函数没有返回正确的值。解决方案是删除所有的断线,并将所有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));
于 2013-08-22T01:40:28.363 回答