JavaScript: .forEach()와 .map()의 차이점
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ 있습니다..forEach()
원래의 어레이로 동작합니다..map()
새 걸로.
내 경우:
function practice (i){
return i+1;
};
var a = [ -1, 0, 1, 2, 3, 4, 5 ];
var b = [ 0 ];
var c = [ 0 ];
console.log(a);
b = a.forEach(practice);
console.log("=====");
console.log(a);
console.log(b);
c = a.map(practice);
console.log("=====");
console.log(a);
console.log(c);
출력은 다음과 같습니다.
[ -1, 0, 1, 2, 3, 4, 5 ]
=====
[ -1, 0, 1, 2, 3, 4, 5 ]
undefined
=====
[ -1, 0, 1, 2, 3, 4, 5 ]
[ 0, 1, 2, 3, 4, 5, 6 ]
쓰는지 안 돼요.practice
" " " 의 값 b
로로 합니다.undefined
.
바보 같은 질문이라면 미안하지만, 저는 이 언어에 익숙하지 않아서 지금까지 제가 발견한 답변은 저를 만족시키지 못했습니다.
그들은 하나가 아니고 똑같지 않다.차이점을 설명하겠습니다.
forEach
: 목록멤버에게 을 적용하고 아무것도 목록에서 반복하여 각 목록 멤버에게 부작용을 수반하는 조작(예: 모든 목록 항목을 데이터베이스에 저장)을 적용하고 아무것도 반환하지 않습니다.
map
:목록을 반복하여 목록의 각 멤버를 변환하고 변환된 멤버와 같은 크기의 다른 목록을 반환합니다(예: 문자열 목록을 대문자로 변환).콜백 함수는 호출된 어레이를 변환하지 않습니다(단, 콜백 함수는 변환합니다.
레퍼런스
Array.protype.ForEach() - JavaScript | MDN
Array.protype.map() - JavaScript | MDN
Array.forEach
"어레이 요소당 한 번씩 제공된 함수를 표시합니다."Array.map
"이 어레이의 모든 요소에 대해 제공된 함수를 호출한 결과로 새 어레이를 만듭니다."
so,는,forEach
됩니다.각 어레이 요소의 함수를 호출하면 됩니다.따라서 호출된 함수 내에서 반환되는 것은 모두 폐기됩니다.
반,는map
는 마찬가지로 각 어레이 요소의 함수를 호출하지만 반환값을 폐기하는 대신 해당 반환값을 캡처하고 해당 반환값의 새 배열을 구축합니다.
이것은 또한 당신이 이 시스템을 사용할 수 있다는 것을 의미합니다.map
하시는 곳forEach
그렇다고 해서 목적 없이 수익률을 수집해서는 안 됩니다.필요 없다면 수집하지 않는 게 더 효율적일 뿐이야.
각()에 대해서 | 맵() | |
---|---|---|
기능 | 어레이의 각 요소에 대해 지정된 작업을 수행합니다. | 각 요소의 "복사"에 대해 지정된 "변환"을 수행합니다. |
반환값 | undefined |
변환된 요소가 포함된 새 배열을 반환하고 원래 배열은 변경하지 않습니다. |
선호 가능한 사용 시나리오 및 예 | 각 요소에 대한 처리와 같은 비트랜포메이션 수행. 예를 들어, 데이터베이스에 모든 요소를 저장합니다. |
배열의 각 요소에 대해 수행된 일부 처리의 출력을 포함하는 배열 가져오기 를 들어 의 각 |
forEach()
chars = ['Hello' , 'world!!!'] ;
var retVal = chars.forEach(function(word){
console.log("Saving to db: " + word)
})
console.log(retVal) //undefined
map()
chars = ['Hello' , 'world!!!'] ;
var lengths = chars.map(function(word){
return word.length
})
console.log(lengths) //[5,8]
할 주요 은 '이것'입니다..map()
하는 동안 " "는 새로운 배열을 반환한다..forEach()
그렇지 않다.그 때문에, 출력의 차이를 알 수 있습니다. .forEach()
이치
읽기:
- JavaScript | MDN도 체크 아웃할 수 있습니다.
퍼포먼스 분석 루프는 어레이 내의 요소 수가 증가함에 따라 맵 또는 포어치보다 고속으로 실행됩니다.
let array = [];
for (var i = 0; i < 20000000; i++) {
array.push(i)
}
console.time('map');
array.map(num => {
return num * 4;
});
console.timeEnd('map');
console.time('forEach');
array.forEach((num, index) => {
return array[index] = num * 4;
});
console.timeEnd('forEach');
console.time('for');
for (i = 0; i < array.length; i++) {
array[i] = array[i] * 2;
}
console.timeEnd('for');
각각:배열 요소에 대해 작업을 수행하고 루프에 사용하는 것과 동일한 경우.이 메서드의 결과에서는 요소를 통해 buy just loop을 출력할 수 없습니다.
map: 어레이 요소에 대해 액션을 수행하고 액션의 출력을 어레이에 저장하는 경우.이것은 반복할 때마다 결과를 반환하는 함수 내 루프의 경우와 비슷합니다.
이게 도움이 됐으면 좋겠다.
map
을 사용하다
forEach
반환값이 없습니다.
그게 차이의 핵심이야여기 있는 대부분의 다른 대답들은 효과적으로 그렇게 말하고 있지만, 훨씬 더 복잡한 방식으로 말한다.
차이점은 그들이 무엇을 반환하느냐에 있다.실행 후:
arr.map()
는 처리된 함수에 의해 생성된 요소의 배열을 반환합니다.단, 다음과 같습니다.
arr.forEach()
정의되지 않은 값을 반환합니다.
Each():
return value : 정의되지 않음
originalArray : 메서드 호출 후 변경되지 않음
메서드 호출 종료 후 newArray가 생성되지 않습니다.
map() :
return value : 호출 배열 내의 모든 요소에 대해 지정된 함수를 호출한 결과로 채워진 새로운 배열
originalArray : 메서드 호출 후 변경되지 않음
메서드 호출 종료 후 newArray가 생성됩니다.
결론:
맵은 새 어레이를 구축하므로 반환된 어레이를 사용하지 않을 때 맵을 사용하는 것은 안티패턴입니다.각 또는 for for for로 사용합니다.
Foreach와 맵의 차이:
Map() : 맵을 사용하면 맵은 메인 어레이를 반복하여 새로운 어레이를 반환할 수 있습니다.
Foreach() : Foreach를 사용하면 각 캔의 메인 배열에 대해 아무것도 반환할 수 없습니다.
useFul link : 차이를 이해하기 위해 이 링크를 사용합니다.
https://codeburst.io/javascript-map-vs-foreach-f38111822c0f
forEach()와 map()의 차이
Each()는 요소를 루프하기만 하면 됩니다.반환값은 폐기하고 항상 정의되지 않은 상태로 반환됩니다.이 메서드의 결과는 출력되지 않습니다.
요소를 통과하는 map() 루프는 메모리를 할당하고 메인 배열을 반복하여 반환값을 저장합니다.
예:
var numbers = [2,3,5,7];
var forEachNum = numbers.forEach(function(number){
return number
})
console.log(forEachNum)
//output undefined
var mapNum = numbers.map(function(number){
return number
})
console.log(mapNum)
//output [2,3,5,7]
map()이 Each()보다 빠릅니다.
여기에 언급되지 않은 셔틀의 차이점 중 하나는 이다.forEach()
(라이브가 아닌) 정적 NodeList를 루프할 수 있습니다.map()
수 없다
//works perfectly
document.querySelectorAll('.score').forEach(element=>console.log(element));
//Uncaught TypeError: document.querySelectorAll(...).map is not a function
document.querySelectorAll('.score').map(element=>console.log(element));
forEach 메서드와 맵 메서드의 주요 차이점은 각 메서드가 어레이를 루프하고 아무것도 반환하지 않는다는 것입니다.
let arr = [1,2,3,4];
let newArr = arr.forEach((x) => x);
console.log(newArr); // prints undefined
반면 맵은 새 배열을 반환합니다.
let arr = [1,2,3,4];
let newArr = arr.map((x) => x);
console.log(newArray); // [1,2,3,4]
맵을 사용하여 어레이의 딥 카피를 작성할 수 있습니다.
주의할 점은 두 방법 모두 초기화되지 않은 값은 건너뛰지만 맵에서는 반환된 배열에 유지됩니다.
var arr = [1, , 3];
arr.forEach(function(element) {
console.log(element);
});
//Expected output: 1 3
console.log(arr.map(element => element));
//Expected output: [1, undefined, 3];
const arr = [...Array(100000000).keys()];
console.time("for");
for (let i = 0; i < arr.length; i++) {}
console.timeEnd("for");
console.time("while");
let j = 0;
while (j < arr.length) {
j++;
}
console.timeEnd("while");
console.time("dowhile");
let k = 0;
do {
k++;
} while (k < arr.length);
console.timeEnd("dowhile");
console.time("forEach");
arr.forEach((element) => {});
console.timeEnd("forEach");
VM35:6 용: 45.998046875 밀리초
VM35:13 기간: 154.581787109375 밀리초
VM35:20 다일: 141.97216796875밀리초
VM35: 24 (각각): 776.4699703125 밀리초
퍼포먼스 분석 (이쪽도 그다지 과학적이지 않음)
.이 .보다수 .
let rows = [];
for (let i = 0; i < 10000000; i++) {
// console.log("here", i)
rows.push({ id: i, title: 'ciao' });
}
const now1 = Date.now();
rows.forEach(row => {
if (!row.event_title) {
row.event_title = `no title ${row.event_type}`;
}
});
const now2 = Date.now();
rows = rows.map(row => {
if (!row.event_title) {
row.event_title = `no title ${row.event_type}`;
}
return row;
});
const now3 = Date.now();
const time1 = now2 - now1;
const time2 = now3 - now2;
console.log('forEach time', time1);
console.log('.map time', time2);
macbook pro (2013년 말)
- 1909년 매회
- .map 시각 444
.map 및 .fors는 수백만 개의 요소를 가진 어레이에서 작업을 시작할 때까지 거의 동일한 작업을 수행합니다. .map은 동일한 크기(및 어레이 종류에 따라서는 유형)의 다른 컬렉션을 만듭니다.이러한 컬렉션은, 각각 대량의 메모리를 소비할 가능성이 있습니다.
맵은 암묵적으로 반환되지만 forEach는 반환하지 않습니다.
따라서 JSX 응용 프로그램을 코딩할 때 거의 항상 ForEach 대신 맵을 사용하여 React에 내용을 표시합니다.
언급URL : https://stackoverflow.com/questions/34426458/javascript-difference-between-foreach-and-map
'programing' 카테고리의 다른 글
출시 전 안드로이드 애플리케이션 최적화 (0) | 2022.09.19 |
---|---|
Java에서 정수를 부동으로 변환하려면 어떻게 해야 합니까? (0) | 2022.09.19 |
반응 - 수집되지 않은 유형 오류: 정의되지 않은 속성 'setState'를 읽을 수 없습니다. (0) | 2022.09.19 |
필드의 "길이"에 대한 MySQL SELECT 문이 1보다 큽니다. (0) | 2022.09.19 |
PHP에서 정수가 숫자의 범위 내에 있는지 확인하는 방법은 무엇입니까? (0) | 2022.09.19 |