forEach / map / filter / reduce 비교

권영균·2021년 9월 24일
0

forEach

  a = [10, 11, 12, 13, 14, 15]; 
      // forEach
      // function forEach(predicate, thisArg) {
      //   for (let i = 0; i < a.length; i++) {
      //     predicate(a[i], i);
      //   }
      // }
      a.forEach(
        function (value, index) {
          console.log('forEach : ' + value, index, this);
        },
        [1, 2]
      );

forEach : 10 0 (2) [1, 2]
forEach : 11 1 (2) [1, 2]
forEach : 12 2 (2) [1, 2]
forEach : 13 3 (2) [1, 2]
forEach : 14 4 (2) [1, 2]
forEach : 15 5 (2) [1, 2]

map

  a = [10, 11, 12, 13, 14, 15];
   // map은 원본배열의 원소를 이용하여 새로운 배열을 생성하는데 원본배열과 동일한 길이로 생성
   // function map(predicate, thisArg) {
   //   let list = [];
   //   for (let i = 0; i < a.length; i++) {
   //     list.push(predicate(a[i], i));
   //   }
   //   return list;
   // }
   let answer = a.map(
     function (v, i) {
       if (v % 2 == 0) return v;
     },
     [1, 2]
   );
   console.log(answer);

(6) [10, undefined, 12, undefined, 14, undefined]
0: 10
1: undefined
2: 12
3: undefined
4: 14
5: undefined
length: 6

filter

  a = [10, 11, 12, 13, 14, 15];
      // 원본배열 안에 해당되는 조건에 따라 필터링해서 true인 값만 배열원소로 생성
      // function filter(predicate, thisArg) {
      //   let list = [];
      //   for (let i = 0; i < a.length; i++) {
      //     if (predicate(a[i], i)) list.push(a[i]);
      //   }
      //   return list;
      // }
      let answer1 = a.filter(
        function (v, i) {
          return v % 2 == 0;
        },
        [1, 2]
      );
      console.log('filter : ' + answer1);

filter : 10,12,14

reduce

  a = [10, 11, 12, 13, 14, 15];
     // function reduce(predicate, val) {
     //   let result = val;
     //   for (let i = 0; i < a.length; i++) {
     //     result = predicate(result, a[i]);
     //   }
     //   return result;
     // }

     // return 값이 acc로 들어감
     // reduce의 두번째 인자는 초기값
     answer2 = a.reduce(function (acc, v) {
       return acc + v;
     }, 0);
     console.log('reduce : ' + answer2);

reduce : 75

profile
GRIT(Growth(성장), Resilience(회복력), Intrinsic Motivation(내재적 동기), Tenacity(끈기))를 중시하는 프론트엔드 개발자입니다.

0개의 댓글