-
[JavaScript] forEach, map, filter, reduceProgramming Language/JavaScript 2022. 1. 31. 13:31
※본 포스팅은 개인 학습을 목적으로 작성된 것이므로 정확하지 않은 정보가 포함되어 있을 수 있음을 참고 부탁드립니다.
1) forEach
forEach는 배열 요소를 하나씩 탐색하면서, 탐색 할 때 마다 callback 함수를 반복 호출
a=[10, 11, 12, 13, 14, 15]; a.forEach(function(v,i){ // 인자로 꼭 2개 넘겨야함 (v: value, i: index) *변수 이름은 원하는대로 console.log(v, i); });
// 강사님이 생각하는 forEach function 내부 // function forEach(predicate, thisArg) { // for(let i=0; i < a.length; i++) { // predicate(a[i], i); // } // } a = [10, 11, 12, 13, 14, 15]; a.forEach(function(v,i){ console.log(v, i, this); // 이 부분은 forEach 함수 내부가 아닌 callback 함수의 내부 }, [1, 2]); // 두 번째 인자로 [1,2] -> thisArg로 넘어감 (callback함수 내부에 사용되는 this에 bind)
2) map
// 강사님 뇌피셜 map 함수 내부 // function map(predicate, val) { // let list = []; // for(let i = 0; i < a.length; i++) { // list.push(predicate(a[i], i)); // 20번 라인에서 return된 값을 원소로 하는 새로운 배열 생성 // } // return list; // } a = [10, 11, 12, 13, 14, 15]; let answer=a.map(function(v,i){ // 새로운 배열을 생성해서 answer 에 넣어줌 return v*v; }, [1, 2]); // thisArg 로 넘어감 console.log(answer);
*map은 새로운 배열도 원본 배열의 길이와 동일하다. 때문에 if (v % 2 == 0) 즉 짝수인 원소만 return 하라고 했지만, 실제로는 [짝수 원소만 출력 요청 시 출력 결과] 처럼 출력된다.
-> 위의 코드에서 list.push(predicate(a[i], i)); 부분에 return 받는 값이 없기 때문에 undefined 를 push함
a = [10, 11, 12, 13, 14, 15]; let answer=a.map(function(v,i){ // 새로운 배열을 생성해서 answer 에 넣어줌 if ( v % 2 == 0) { return v; } }, [1, 2]); // thisArg 로 넘어감 console.log(answer);
3) filter
*filter 는 map 과 다르게 새로운 배열의 길이가 원본 배열의 길이와 달라도 된다.
// function filter(predicate, thisArg) { // let list=[]; // 새로운 배열을 return // for(let i=0; i < a.length; i++) { // if (predicate(a[i], i)) { // list.push(a[i]); // true 일 때 // } // } // return list; // } a = [10, 11, 12, 13, 14, 15]; let answer=a.filter(function(v,i){ return v % 2 == 1; }); console.log(answer);
4) reduce
// 강사님 뇌피셜 reduce 함수 내부 // function reduce(predicate, val) { // let result = val; // val의 값 받음 // for(let i = 0; i < a.length; i++) { // if (predicate(a[i], i)) { // result = predicate(result, a[i]); // 누적 값과, 해당 값 ex) 21, 12 // } // } // return result; // } a = [10, 11, 12, 13, 14, 15]; let answer=a.reduce(function(acc,v){ return acc+v; // 21+12 }, 0); // 0은 acc의 초기 값 console.log(answer); // 배열 a의 합계 출력
'Programming Language > JavaScript' 카테고리의 다른 글
코어 자바스크립트 | 자바스크립트 기본 1 (0) 2022.04.14 코어 자바스크립트 | 소개 (0) 2022.04.14 [JavaScript] JS에서의 배열은 배열이 아니다? (0) 2022.02.05 [JavaScript] charAt(), charCodeAt(), String.fromCharCode() (0) 2022.02.01 [JavaScript] 생활코딩 - 실습1 (0) 2021.06.28