为什么这个长返回语句不适用于Javascript?

时间:2013-08-19 00:03:45

标签: javascript json sorting compare

我有一个带有下一个结构的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文件测试代码。

我做错了什么?

2 个答案:

答案 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));