나는 항상 그들 사이의 차이점이 무엇인지 궁금했습니다. 그들은 모두 같은 일을하는 것 같습니다 …
답변
차이점은 반환 값에 있습니다.
.map()
원래 항목에 대해 몇 가지 작업을 수행하여 생성 된 새 객체 배열을 반환합니다 .
.every()
부울을 반환합니다. 이 배열의 모든 요소가 제공된 테스트 함수를 충족하는 경우 true입니다. 의 중요한 차이점 .every()
은 배열의 모든 요소에 대해 테스트 함수가 항상 호출되는 것은 아니라는 것입니다. 테스트 함수가 요소에 대해 false를 반환하면 더 이상 배열 요소가 반복되지 않습니다. 따라서 테스트 기능은 일반적으로 부작용 이 없어야 합니다 .
.forEach()
아무것도 반환하지 않음 -배열의 각 항목에 대해 주어진 작업을 수행하는 배열을 반복합니다.
MDN에서 이것들과 다른 많은 어레이 반복 방법에 대해 읽어보십시오 .
답변
gilly3의 대답은 훌륭합니다. 다른 유형의 “요소를 통한 루프”기능에 대한 약간의 정보를 추가하고 싶었습니다.
.every()
(반복자가 처음으로 거짓을 반환하거나 거짓을 반환 할 때 루프를 중지합니다.).some()
(반복자가 참 또는 진실을 처음으로 반환 할 때 루프를 중지합니다).filter()
(필터 함수가 true를 반환하고 false를 반환하는 요소를 생략하는 요소를 포함하는 새 배열을 만듭니다).map()
(반복자 함수가 반환 한 값에서 새 배열을 만듭니다).reduce()
(반복기를 반복하여 호출하고 이전 값을 전달하여 값을 빌드합니다. 자세한 내용은 사양을 참조하세요. 배열의 내용을 합산하는 데 유용합니다.).reduceRight()
(감소와 같지만 오름차순이 아닌 내림차순으로 작동)
신용 : TJCrowder For-each over an array in JavaScript?
답변
위의 훌륭한 답변에 대한 또 다른 고려 사항은 연결입니다. forEach ()를 사용하면 연결할 수 없지만 map ()을 사용하면 할 수 있습니다.
예를 들면 :
var arrayNumbers = [3,1,2,4,5];
arrayNumbers.map(function(i) {
return i * 2
}).sort();
.forEach ()를 사용하면 .sort ()를 수행 할 수 없으며 오류가 발생합니다.
답변
들어 Ramda 의 차이 R.map()
와는 R.forEach()
것입니다 :
R.forEach()
원래 배열을R.map()
반환하고 펑터를 반환합니다.R.forEach()
배열에서만 작동 할 수 있지만R.map()
객체에서도 작동 할 수 있습니다 (즉, 객체의 키 / 값 쌍이 배열처럼 취급 됨).
답변
