我很难让我的一个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
};
}
});
});
}
现在我想返回一个具有两个属性的对象:'name'和'state'。但是,无论我在console.log
下添加什么,我的函数都没有返回任何内容(虽然找到了数据,因此控制台正在记录)。
currEvent = GW2API_getEventInfo(GW2API_events_ShadowBehemoth[i]);
alert(currEvent)
- >收益率“未定义”
答案 0 :(得分:1)
它应该 - 你没有返回任何东西。
你在第二个$.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
}
答案 1 :(得分:0)
使用.each()
意味着您正在创建内部闭包功能。事实上,你是从闭包函数返回,但不是从你的主函数返回
你可能最好不要在这里使用jQuery .each()
,只使用标准的Javascript for()
循环。
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
都是数组。如果它们是对象,你需要使用{相反,{1}}样式循环,但原理是相同的)