如何从对象输出数组而不对其进行排序

时间:2015-10-12 05:50:59

标签: jquery

我正在使用ajax,当我得到我的响应(这是一个对象)时,它给了我奇怪的输出。

所以,在"成功"方法,我尝试了console.log(res),这就是我所拥有的:

Object {new_month: "Semptember", days_calender: Object}

然后,我尝试console.log(res [' days_calender']);这是输出:

Object {10: "n", 11: "n", 12: "n", 13: "n", 14: "n", 15: "n", 16: "n", 17: "n", 18: "n", 19: "n", 20: "n", 21: "n", 22: "n", 23: "n", 24: "n", 25: "n", 26: "n", 27: "n", 28: "n", 29: "n", 30: "n", 01: "n", 02: "n", 03: "n", 04: "n", 05: "n"…}

问题是我需要使用方法each()创建元素并将其附加到div #calender,但是当我这样做时,第一个案例得到" 10",第二个案例" ; 11"等等。

有没有办法让我的对象排序?

dataType: 'json',
            success: function(res){
                console.log(res);
                console.log(res['days_calender']);
                $.each(res['days_calender'], function(key, val) {
                    updateCalender(key, val);
                });

我的updateCalender函数:

    function updateCalender(day, activity)
{
    var li = document.createElement("li");
    $('#calender ul').append(li);

    var a = document.createElement("a");
    a.setAttribute('href', '/activities/'+day);
    a.innerHTML = day;
    li.appendChild(a);
}

编辑:

这就是它最初的样子:

    Array
(
    [new_month] => September
    [days_calender] => Array
        (
            [01] => n
            [02] => n
            [03] => n
            [04] => n
            [05] => y
            [06] => y
            [07] => n
            [08] => n
            [09] => y
            [10] => n
            [11] => n
            [12] => n
            [13] => n
            [14] => n
            [15] => n
            [16] => n
            [17] => n
            [18] => n
            [19] => n
            [20] => n
            [21] => n
            [22] => n
            [23] => n
            [24] => n
            [25] => n
            [26] => n
            [27] => n
            [28] => n
            [29] => n
            [30] => n
        )

)

1 个答案:

答案 0 :(得分:1)

您可以在数字上对键进行排序

var res = {'days_calender':{10: "n", 11: "n", 12: "n", 13: "n", 14: "n", 15: "n", 16: "n", 17: "n", 18: "n", 19: "n", 20: "n", 21: "n", 22: "n", 23: "n", 24: "n", 25: "n", 26: "n", 27: "n", 28: "n", 29: "n", 30: "n", 01: "n", 02: "n", 03: "n", 04: "n", 05: "n"}};

var array = $.map(res['days_calender'], function(value, index) { // convert to array of objects
    return {day:index, activity:value};
});

array.sort(function(a,b){ // sort numerically by day
    return parseInt(a.day) - parseInt(b.day);
});

$.each(array, function(key, val) {
    updateCalender(val.day, val.activity);
});

JSFiddle demo