0

我正在努力让我的 JavaScript 函数之一返回它的值。请注意以下代码:

function GW2API_getEventInfo(p_eventid) {
    console.log("Getting EventInfo for event " + p_eventid);
    $.each(arrEvents, function(i, eventItem) {
        $.each(eventItem, function(j, eventInfo) {
            if (eventInfo.event_id == p_eventid) {
                console.log(GW2API_getEventName(p_eventid) + " - " + eventInfo.state);
                return {
                    'name': GW2API_getEventName(p_eventid),
                    'state': eventInfo.state
                };
            }
        });
    });
}

现在我想返回一个具有两个属性的对象:“名称”和“状态”。但是,无论我在下面添加什么console.log,我的函数都不会返回任何内容(尽管找到了数据,因此控制台正在记录)。

currEvent = GW2API_getEventInfo(GW2API_events_ShadowBehemoth[i]); alert(currEvent) --> 产生“未定义”

4

2 回答 2

1

它应该 - 你没有返回任何东西。

您在 second 的匿名函数中返回了某些内容$.each,但您没有在GW2API_getEventInfo函数中返回任何内容。

也许这就是你的意思:

function GW2API_getEventInfo(p_eventid) {
    var result = null;
    console.log("Getting EventInfo for event " + p_eventid);
    $.each(arrEvents, function(i, eventItem) {
        $.each(eventItem, function(j, eventInfo) {
            if (eventInfo.event_id == p_eventid) {
                console.log(GW2API_getEventName(p_eventid) + " - " + eventInfo.state);
                result = {
                    'name': GW2API_getEventName(p_eventid),
                    'state': eventInfo.state
                };
                return; //Out of the inner $.each
            }
        });
        if (result !== null) {
            return; //Out of the outer $.each
        }
    });
    return result; //Return the value in the GW2API_getEventInfo function
}
于 2013-06-14T14:19:36.560 回答
0

Using.each()意味着您正在创建一个内部闭包函数。就目前情况而言,您是从闭包函数返回,而不是从主函数返回

你可能最好不要.each()在这里使用 jQuery,而只使用标准的 Javascriptfor()循环。

function GW2API_getEventInfo(p_eventid) {
    for(var i=0; i<=arrEvents.length; i++) {
        var eventItem = arrEvents[i];
        for(var j=0; j<=eventItem.length; j++) {
            var eventInfo = eventItem[j];
            if (eventInfo.event_id == p_eventid) {
                return {
                    'name': GW2API_getEventName(p_eventid),
                    'state': eventInfo.state
                };
            }
        });
    });
}

这避免了使用闭包函数的需要,从而避免了返回值的混淆。

它也可能比 jQuery 版本运行得更快。

(注意,我不知道你这里的数据结构;我假设它是arrEvents并且eventItem都是数组。如果它们是对象,则需要使用for(..in..)样式循环,但原理是一样的)

于 2013-06-14T14:37:54.253 回答