ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 자바스크립트 배열 비교 (공통점, 용도, 사용법, 예제 코드, 특징)
    JavaScript 2022. 10. 2. 04:07
      공통점 용도 사용법 예제 코드 특징
    forEach - 고차함수(함수를 인수로 전달받거나 함수를 반환하는 함수, 불변성을 지향)

    - 그외 고차함수 : sort, findIndex, flatMap

    - 모든 배열은 중간에 요소 멈춤 불가
    for 문 대체 할 수 있는 고차함수(왜? 반복을 위한 별도의 변수를 선언해야하므로 함수형 프로그래밍이 추구하는 바와 다름) - 자신의 내부에서 반복문을 통해 자신을 호출 한 배열을 순회하며 수행할 처리를 콜백함수 로 전달받아 반복 - [3개의 인수 전달 받는 콜백 함수] 메서드를 호출한 배열 의 요소값, 인덱스, 메서드를 호출한 배열 자체(this)를 인 수로 전달받아 사용

    - [2개의 인수 전달 받는 콜백 함수] 요소값, 콜백 함수 내 부에서 this로 사용할 객체를 전달할 수 있다 그러나 더 나 은 방법은 화살표 함수를 사용하는 것
    const arr = [];
    [1, 2, 3 ].forEach((ele)=> arr.push(ele * 2 );
    console.log(arr) // [2, 4, 6 ];
    - forEach 메서드는 원본 배열을 변경하지는 않지만 콜백 함수를 통해 원본 배열을 변경 할 수 는 있다.

    const numbers = [1, 2, 3];
    numbers.forEach((item, index, arr) =>{arr[index] = item ** 2};
    console,log(numbers) // [1, 4, 9]

    - forEach 메서드의 반환값은 언제 나 undefined

    - for문과 달리 break, continue문을 사용할 수 없으므로 배열의 모든 요 소를 순회하여 중간에 순회를 중단 불가 ( 희소 배열의 요소는 undefined출 력, 순회 대상에서 제외 )

    - side effect 100% 발생함

    - 이터레이터(이터러블한 객체를 순차적으로 탐사)와 동일
    map 요소값을 다른 값으로 매핑하여 새로운 배열 을 생성하는 고차함수 const arr = [];
    [1, 2, 3 ].map((ele)=> arr.push(ele * 2 );
    console.log(arr) // [2, 4, 6 ];
    - map 메서드를 호출한 배열과 map 메서드가 새롭게 생성하여 반환한 배열은 1:1 매핑관계

    - return 없는 map메서드는 forEach와 동일하므로 return 필수!
    filter 배열의 모든 요소를 순회하면서 인수로 전달 받은 콜백함수를 반복 호출하며 반환 값이 true인 요소로 구성된 새로운 배열을 반환 [1, 2, 2, 3].filter(item => item === 2) // [2, 2] - 생성된 배열의 length는 filter메서 드를 호출한 배열의 length와 같거 나 작다 - 자신을 호출한 배열에서 특정 요 소를 제거하기 위해 사용할 수 있다.

    - 호출한 배열이 특정 요소가 중복 되어 있다면 중복된 요소가 모두 제 거되므로 특정 요소를 하나만 제거 하고자 한다면 indexOf메서드를 통 해 특정 요소의 인덱스를 취득한 후 에 splice메서드를 사용해야함

    - 판별식은 return에서 판별일뿐, 판별식 이전 이후에서 하는 것은 무의미

    - filter는 중복된 판별식 모두를 판별해서 제거하는데, 하나의 중복된 요소만 제거하고자 한다면 findIndex + splice가 아니라 reduce 사용하기를 권장


    some 배열의 요소 중에 콜백함수를 통해 정의한 조 건을 만족하는 요소가 1개이상 존재하면 그 결과를 불리언 타입으로 반환 [5, 10, 15].some(item => item > 10 ) // true - some메서드를 호출한 배열이 빈 배열일 경우 언제나 false 반환

    - true인 요소가 나올때까지 순환

    - 첫 요소부터 랭킹같이 모든 요소를 순회하지 않고 일부만 순회하기 원할때 적합


    every 배열의 모든 요소가 콜백 함수를 통해 정의한 조건을 모두 만족하는 지 확인하여 그 결과 값 을 불리언 타입으로 변환 [5, 10, 15].every(item => item > 10 ) // false - every메서드를 호출한 배열이 빈 배열일 경우 언제나 true 반환

    - false인 요소가 나올때까지 순환

    - 첫 요소부터 랭킹같이 모든 요소를 순회하지 않고 일부만 순회하기 원할때 적합
    find 배열의 요소를 순회하면서 인수로 전달된 콜 백함수를 호출하여 반환한 값이 true인 첫 번 째 요소를 반환한다. true인 요소가 존재하지 않는다면 undefined를 반환 [1, 2, 2, 3].find(item => item === 2) // 2 - es6도입
    - vs filter
    reduce 배열의 모든 요소를 순회하며 인수로 전달받 은 콜백함수를 반복 호출하여 콜백함수의 반 환값을 다음 순회 시에 콜백함수의 첫번째 인 수로 전달하며 콜백함수를 호출하여 하나의 결과값을 만들어 반환 [2개의 인수를 전달받음]

    - 1번째 인수 : 4개의 인수를 받을 수 있는 콜백함수 - 초기값 또는 콜백함수의 이전 반환값
    - reduce 메서드를 호출한 배열의 요소값
    -  reduce 메서드를 호출한 인덱스
    -  reduce 메서드를 호출한 배열 자체 (this)

    - 2번째 인수 : 초기값 ( 생략 가능하지만 비추천 )
    - 평균 구하기
    [1, 2, 3].reduce((acc, cur, i, {length})
    =>{ return i === length - 1 ?(acc + cur) / length : acc + cur }, 0);

    - 최대값 구하기 ( vs Math.max)
    [1, 2, 3].reduce((acc, cur) =>{ (acc > cur ? acc : cur) }, 0);

    - 요소의 중복 횟수 구하기
    const arr = ["a", "b", "c", "a"];
    const cnt = arr.reduce((acc, cur) => { acc[cur] = (acc[cur] || 0) + 1 return acc; }, {});
    console.log(cnt) // {a: 2, b: 1, c: 1} - 중첩 배열의 평탄화 vs flat 메서드 [1, [2, 3], 4, [5, 6]].reduce((acc, cur) => acc. concat(cur), []); // [1, 2, 3, 4, 5, 6] - 중복 요소 제거 vs filter 메서드 [1, 2,1, 3, 5, 4, 5, 3, 4, 4].reduce((acc, cur, i, arr) =>{ if(arr.indexOf(cur) === i) acc.push(cur); return acc; }, []); // [1, 2, 3, 5, 4]
    - 모든 배열의 고차함수는 reduce 메서드로 구현 가능

    - 빈 배열로 reduce메서드를 호출하 면 에러 발생하지만 초기값을 전달 해주면 에러 안남

    - 객체의 특정 프로퍼티 값을 합산 하는 경우 유용하며 반드시 초기값 을 전달해야함 (왜 ? NaN 나올 수 있음)
Designed by Tistory.