2012-09-04 8 views
43

가능한 중복 :
How to short circuit Array.forEach like calling break?break 문

내 조건이 충족 된 후에 내가 배열지도 방법을 탈피 할 수 있도록 방법이 있나요? 나는 다음과 같은 것을 시도했다. "Illegal Break Statement" Error. 이것은 내가 생각해 낸 무작위 예이다.

var myArray = [22,34,5,67,99,0]; 

var hasValueLessThanTen = false; 

myArray.map(function (value){ 
    if(value<10){ 
     hasValueLessThanTen = true; 
     break; 
    } 
    } 
); 

우리는 for 루프를 사용하여이 작업을 수행 할 수 있지만, 나는 우리가 map 방법을 사용하여 동일한 작업을 수행 할 수 있는지 여부를 알고 싶어?

+4

본질적으로 Rob W가 말한 질문과 중복됩니다. 그러나,이 오해의 근원은'map' 메쏘드의 잘못된 사용법입니다. 이것은 값을 맵핑하기위한 것이기 때문에 반복을 멈추지 않아야합니다. – Yoni

+10

@Yoni가 맞습니다. OP가 깨질 수있는 forEach 루프를 찾고 있다면 ['[] .every']와 같은 메소드를 고려하십시오 (https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/every).) (계속하려면 'true'를 반환하고 중단하지 않으려면 '취소') 또는 ['[] .some'] (https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array)/some) - 중단하려면 true를 반환하고 계속하려면 true를 반환합니다. –

+0

또는 ['[] .reduce'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce). 두 번째 인수로'[]'를 전달하고 조건이 충족 될 때만 수정합니다. –

답변

60

내장 된 Array.prototype.map을 사용하는 것은 불가능합니다. @RobW에 의해 제안,

var hasValueLessThanTen = false; 
for (var i = 0; i < myArray.length; i++) { 
    if (myArray[i] < 10) { 
    hasValueLessThanTen = true; 
    break; 
    } 
} 

이하 적어도 하나 개의 원소가 존재하는 경우 테스트 Array.prototype.some를 사용 : 당신이 map 어떤 값을하지 않을 경우, 당신은 대신 간단한 for -loop를 사용할 수 있습니다 함수에 맞는 일부 요소가 발견되면 루핑이 중지됩니다.

var hasValueLessThanTen = myArray.some(function (val) { 
    return val < 10; 
}); 
+2

Rob이 이미 언급 했음에도 불구하고 일부 사례에 감사드립니다. 사람들은 항상 주석을 조사하지는 않지만 보통 코드 샘플을 atleast 스캔합니다! – TheOneWhoPrograms

+3

왜 'Array.prototype.map'을 사용할 수 없습니까? – Vadorequest

+2

@ Vadorequest 내가 js 초보자 였을 때 질문을 게시했는데, 'Array.prototype.map'이 그런 식으로 사용되지 않아야한다는 것을 알았습니다. 모든 요소를 ​​변형시키려는 완전히 다른 용도로 사용할 수있는 도우미 메소드입니다. 지정된 배열을 다른 변형으로 변환합니다. 따라서 "모든 요소"에 관해서는 "break"문이 필요하지 않을 것입니다. break 문이 필요할 경우지도가 필요하지 않을 수도 있습니다. 필자는 iterator가 필요한 경우 iterator로 사용하려고했기 때문에이 질문을 게시했습니다. 그런 다음 'for' 루프 또는'forEach'와 함께 'return'과 함께 사용하십시오. –