将JSON对象推入Array

时间:2014-11-25 13:41:00

标签: javascript jquery json

我有一个函数,它获取一个Date并从JSON文件中读取事件。当Date置于事件的时间段内时,应将其添加到数组中,该数组应在函数末尾返回。

function getEvents(askDate) {
    var askDate = new Date(askDate);
    var result = new Array();
    $.getJSON(EVENTS_JSON, function(data) {
        $.each(data.events, function(key, entry) {
            if(isInPeriod(askDate.setHours(0,0,0,0), new Date(entry.date[0]).setHours(0,0,0,0), new Date(entry.date[1]).setHours(0,0,0,0))) {
                result.push(entry);
            }
        });
    });
    if(result.length === 0) {
        result = false;
    }
    return result;
}

不幸的是我收到以下错误:" TypeError:result.push不是函数"。

isInPeriod函数工作正常,以前我在result.push()之前有一个控制台输出,它是JSON对象。

JSON看起来像:

{
    "events":   [
        {
            "id": 1,
            "name": "Example Event",
            "date": [
                "2014/11/25 07:30:00",
                "2014/11/25 09:00:00"
            ],
            "desc": "Lorem Ipsum sim dolor",
            "image": "http://upload.wikimedia.org/wikipedia/commons/8/84/Example.svg",
            "adress": "Example Road 12",
            "youtube": "https://www.youtube.com/watch?v=_5DqL5-izAY",
            "tags": [
                "Example"
            ],
            "categories": [
                "main_category",
                "sub_category",
                "sub_sub_category"
            ]
        }
    ]
}

1 个答案:

答案 0 :(得分:6)

这是由于$.getJSON的异步性质造成的。外部函数的其余部分在循环数据的成功回调之前运行。由于外部函数的其余部分正在运行,这意味着因为:

if(result.length === 0) {
    result = false;
}

result不再是数组,因此在您尝试使用它时没有push方法。您需要重新构建代码 - 有关详细信息,请参阅this question