2016-07-12 4 views
0

나는 몇 가지 정보를 비교하고 올바른 객체를 얻으려고합니다. 하지만 출력 자체를 함수 자체로 반환 할 수 없습니다.외부에서 함수에 값을 반환하십시오.

channelUserRight: function(channel, nickname){ 

     userlist.forEach(function(chaninfo) { 
      if(chaninfo.channel === channel && chaninfo.name === nickname){ 
       // Whenever I do console.log it shows me output 
       console.log(chaninfo); 
       return chaninfo; 
      }   
     }); 

    } 
// Here it shows me 'undefined' 
console.log(channelUserRight(channel, user)) 
channelUserRight(channel, user) 

따라서 함수 내부에는 올바른 개체가 있지만 함수 외부에는 없습니다.

+1

'channelUserRight'에서 아무 것도 반환하지 않습니다. 'return' 문은 forEach 콜백 내부에 있습니다. 그건 아무것도 안해요. 'forEach' 콜백은 각 요소에 대해 실행되며 모든 반환 값은 무시됩니다. –

답변

3

당신이있어 단지의 forEach 함수에 대한 콜백으로 돌아 대신 필터를 사용하는 경우, 당신은 당신이 설정해야이 상황에서 필터링 된 배열 또는 직접

channelUserRight: function(channel, nickname){ 
    var list = userlist.filter(function(chaninfo) { 
     return chaninfo.channel === channel && chaninfo.name === nickname; 
    }); 

    return list.length ? list.shift() : null; 
} 
+1

'.filter()'호출에 대한 명성. –

+0

어떻게 [0]으로 직접 반환 할 수 있습니까? index 그렇지 않으면 많은 코드를 편집해야합니까? –

+0

@ J.Doe - 첫 번째 색인이있는 경우이를 반환하도록 편집되었습니다. – adeneo

1

단지 최초의 인덱스를 반환 할 수 있습니다 당신의 값을 반환하는 기능 수준과 사용에 변수 :

function(channel, nickname){ 
    var _chaninfo; 

    userlist.forEach(function(chaninfo) { 
    if(chaninfo.channel === channel && chaninfo.name === nickname) { 
     _chaninfo = chaninfo; 
    } 
    }); 

    return _chaninfo; 
} 

문제는 함수 블록에서 return 반환 반복하는 데 있다는 것입니다. filter을 사용한 @ adeneo의 접근 방식은 실제로 더 깨끗하기 때문에이를 사용하는 것이 좋습니다. 그러나이 문제는 즉각적인 문제 해결을위한 "수정"입니다.

관련 문제