2013-06-14 2 views
0

내 JavaScript 함수 중 하나가 값을 반환하는 데 어려움을 겪고 있습니다. 다음 코드를 준수하십시오 :(아주) 기본 함수의 반환 값은 "undefined"입니까?

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

이 답변을보십시오 : http://stackoverflow.com/a/14441307/1233508. 함수의 최상위 레벨에 변수를 만들고, 반환 할 값을 할당 한 다음 루프가 완료된 후에 반환해야합니다. – DCoder

+0

어디로 돌아갈 것으로 예상합니까? 이것은 익명의 함수로 jQuery 함수의 인수로 전달됩니다. **이 함수는 ** 객체를 반환합니다. 이것은 단지 코드로 반환되지 않습니다. –

+0

답장을 보내 주셔서 감사합니다. 사실, 안쪽에서 바깥 쪽 루프 반환 값을 반환하지 내 내 바보 같은 실수. 함수의 최상위 수준에서 변수를 선언하고 단순히 루프에서 데이터를 할당 한 후 (및 채우기 된 변수를 루프 후 반환) 매력처럼 작동합니다! – Tribio

답변

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 
} 
+0

코드를 보내 주셔서 감사합니다! 실제로 내부에서 외부로 데이터를 반환하지 않고 코드의 외부에서 나머지 데이터로 데이터를 반환하지는 않습니다. 이제는 초보자처럼 느낍니다. 다시 한 번 감사드립니다! – Tribio

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 버전보다 빨리 실행될 가능성이 있습니다. 그들이 객체 인 경우에, 당신은 대신 for(..in..) 스타일의 루프를 사용해야합니다 나는 그것이 arrEvents을 그리고 eventItem 모두 배열 인 것으로 가정했지만, 원칙은,.

(주, 여기 당신의 데이터 구조를 모르는 동일합니다)

관련 문제