웹(WEB)/자바스크립트(JS)

자바스크립트 map, filter, reduce

마달랭 2024. 8. 6. 10:27
반응형

개요

forEach와 map의 차이

forEach : 배열의 요소를 하나씩 탐색하며, Callback 함수를 수행
map : 배열의 요소를 하나씩 탐색하며, Callback 함수의 return 값을 모아둔다. Array를 새롭게 만든다.

 

1. map

배열 안의 각 요소를 변환할 때 사용, 이 과정에서 새로운 배열이 만들어짐

const datas = [3, 5, 4, 2];
const newDatas = datas.map((data) => data + 1);

 

datas 배열 내 값에 1씩 더해진 값을 요소로 갖는 newDatas 배열을 새로 생성한다.

 

2. filter

배열에서 특정 조건을 만족하는 값들만 따로 추출, 이 과정에서 새로운 배열이 만들어짐

const datas = [3, 5, 4, 2];
const newDatas = datas.filter((data) => data > 3);

 

3을 초과하는 수 5, 4를 담은 newDatas 배열을 새로 생성한다.

 

3. reduce

Arrary.reduce( (acc, cur) -> {}, 초기값)
초기값은 생략이 가능하다.
초기값에 숫자뿐만 아니라, 문자, 배열, 빈 객체도 넣을 수 있다.
첫 번째 인자는 accumulator(누산기를 의미)
결과 값을 해당 acc에 담아서 출력
두 번째 인자는 현재 값을 의미
최종 결과 값이 accResult에 들어간다.

reduce를 통해 map, filter, find.. 등등 거의 모든 메서드가 구현가능

const datas = [1, 2, 3, 4, 5];
const accResult = datas.reduce((acc, cur) => acc + cur);

 

초기 acc는 0, cur에 배열의 각 요소가 들어가고 acc에 누적하여 cur을 더해준다.

accResult는 15가 저장되어 있다.

 

 

 

 

예제

1. 제곱의 값을 모아둔 Array를 생성하기

코드

const arr = [1, 2, 3, 4, 5];
const newarr = arr.map((data) => data * data);
console.log(newarr);

 

출력

 

2. 문자열 배열 요소의 길이를 모아 둔 Array를 생성하기

코드

const arr2 = ["a", "bcd", "ef", "g"];
const newarr2 = arr2.map((str) => str.length);
console.log(newarr2);

 

출력

 

3. 배열 내 특정 값만 뽑아와 새로운 배열 생성하기

const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 을 하드코딩 하고
• arr1 에는 arr 의 값 중 홀수만 담아서 console.log로 나타내기
• arr2 에는 arr 의 값 중 3보다 크고 9보다 작은 숫자들만 담아서 console.log로 나타 내기

 

코드

const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
const arr1 = arr.filter((n) => n % 2);
const arr2 = arr.filter((n) => 3 < n && n < 9);

console.log(arr1);
console.log(arr2);

 

출력

4. 배열의 중복된 개수 찾기

코드

const arr = ["피카츄", "라이츄", "파이리", "꼬부기", "피카츄", "파이리"];
const result = arr.reduce((acc, cur) => {
    if (acc[cur]) {
        acc[cur] = acc[cur] + 1;
    } else {
        acc[cur] = 1;
    }
    return acc;
},{});

console.log(result);

 

출력

 

 

실습

1. 버킷 리스트 작성하기

본인의 bucketList를 작성하고 done 속성이 false인 객체들만 새로운 Array에 저장 후, Array 출력하기

 

코드

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        const bucketList = [
            {
                id: 1,
                text: "퇴근 하기",
                done: false,
            },
            {
                id: 2,
                text: "점심 먹기",
                done: true,
            },
            {
                id: 3,
                text: "코딩 하기",
                done: true,
            },
            {
                id: 4,
                text: "술 먹기",
                done: false,
            },
        ];

        const doit = bucketList.filter((list) => !list.done)
        console.log(doit);
    </script>
    
</body>
</html>

 

출력

 

728x90
반응형