2017-12-21 1 views
0

다음과 같은 코드 블록을 사용하여 동일한 용도로 사용합니다. 어떤 이유로 든 for 루프는 forEach 루프와 다른 결과를 낳습니다. 그 이유는 확실하지 않습니다. 첫 번째 forEach 루프가 실패 할 때마다 또는 null로 갈 것으로 보인다 반면 비슷한 forEach와 for 루프의 다른 동작


for (let index = 0; index < this._domains.length; index++) { 
    if ((userDomain.name === this._domains[index].domainName) || 
     (userDomain.fullyQualifiedDomainName === this._domains[index].netBiosName) || 
     (userDomain.name === this._domains[index].netBiosName)) { 
     return this._domains[index]; 
    } 
} 
return null; 

두 번째 for 루프

this._domains.forEach(domain => { 
    if ((userDomain.name === domain.domainName) || (userDomain.fullyQualifiedDomainName === domain.netBiosName) || 
     (userDomain.name === domain.netBiosName)) { return domain; } 
    }); 
} 
return null; 
나에게 예상되는 결과를 제공합니다.

내가 여기에서 놓치고있는 아이디어 나 것들? 반복에서 새 배열을 만들지는 않겠지 만 map, filter 또는 reduce과 같은 다른 고차 기술을 사용할 수있는 좋은 기회일까요?

감사

+6

내부의'return'은'.forEach()가'콜백 영향을주지 않습니다; 그것은 단지 콜백 함수로부터 리턴되며 함수를 포함하는 외부로부터 리턴되지 않습니다. – Pointy

+0

@Pointy 아, 비슷한 것을 얻고 싶다면 해당 일치 항목을 저장하고 루프에서 빠져 나와 외부 함수에서 돌아 오겠습니까? 또는 일치하는 것이 있으면 변수에 저장 한 다음 해당 변수를 반환하고 호출 함수에서 변수가 null인지 확인합니다 (변수가 null이면 그렇지 않습니다)? –

+1

첫 번째 버전을 사용하려면 return this._domains.find (domain'... 등)을 실행하십시오. 내부 'return domain'이 작동하지만'if '조건 자체의'return' 일 수도 있습니다 – trincot

답변

3

당신의 forEach 콜백의 반환 콜백 자체가 아닌 외부 기능입니다.

단일 값을 반환하려는 경우 forEach은 잘못된 선택입니다. find 사용 대신 myFunc 내부에 선언 된 변수에 결과를 저장하는 경우

function myFunc(userDomain) { 

    return this._domains.find(domain => 
     userDomain.name === domain.domainName || 
     userDomain.fullyQualifiedDomainName === domain.netBiosName || 
     userDomain.name === domain.netBiosName); 

} 

다른 방법으로, foreach는 사용할 수 있습니다.

+0

큰 대답과 간결합니다. 감사합니다! –

1

forEach() 함수는 모든 요소를 ​​반복하고 매개 변수로 주어진 콜백 함수를 호출합니다. 휴식을 취하거나 돌아 오는 길을 막을 방법이 없습니다.

일부 콜백 함수가 값을 반환해도 상관 없습니다. 외부 함수에는 아무런 영향을주지 않으며 어떤 경우에도 정의되지 않은 forEach의 결과에는 영향을주지 않습니다.

목록의 각 항목에서 부작용을 유발할 수있는 함수를 호출해야하는 경우 forEach를 사용해야합니다.

참조 : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach