[JavaScript] 자바스크립트 조건을 만족하는 배열 요소 추출하여 새 배열 만들기

2022. 5. 31. 19:43Program/JavaScript

056_자바스크립트 조건을 만족하는 배열 요소 추출하여 새 배열 만들기

[적용]

  • 유저 정보 배열에서 18세 이상인 유저의 정보만을 가져와 배열을 생성하고 싶을 때

[문법]

메소드 의미 반환
배열.filter(콜백함수) 콜백 함수 조건을 만족하는 데이터의 배열 생성  배열

[문법] - 콜백 함수

구문 의미
([요소*], [인덱스*], [기존배열*]) => 진리값 요소를 받아 진위 반환

* 생략 가능


[내용]

filter()는 콜백 함수 조건에 만족하는 요소들을 새로운 배열로 생성한다. [10, 20, 30, 40] 배열에서 30 이상의 수를 가져와 배열을 생성하는  샘플을 확인해 보자

const newArray = [10, 20, 30, 40].filter((value) => value >= 30);

console.log(newArray);  // 결과: [30, 40]

 

콜백 함수는 요소가 30 이상인지를 확인한다. 30 이상이면 true를 반환하고 새로운 배열의 요소가 된다.

콜백 함수를 다음과 같이 사용할 수도 있다.

const newArray = [10, 20, 30, 40].filter((value) => {
    return value >= 30;
}):

const newArray = [10, 20, 30, 40].filter(function(value) {
    return value >= 30;
});

[예시]

20세 이상, 30세 이상, 40세 이상의 레이브 (Label)을 가지는 버튼을 생성하여

클릭에 따라 유저 리스트를 출력하는 샘플을 확인해 보자

 

HTML                                                                                                                                                              index.html

<body>
    <div class="button-wrapper">
        <button class="button" data-age="20">20세 이상</button>
        <button class="button" data-age="30">30세 이상</button>
        <button class="button" data-age="40">40세 이상</button>
    </div>
    <ul class="user_list">
        
    </ul>
</body>

버튼 클릭 시의 onClickButton() 처리는 button 요소가 가지고 있는 데이터 값을 가져온다.

조건에 만족하는 요소를 userDataList에서 가져와 updateList()를 통해 배열을 생성한다.

 

JavaScript                                                                                                                                                          main.js

// 데이터
const userDataList = [
    { name: '곰', age: 18 },
    { name: '여우', age: 27 },
    { name: '사자', age: 32 },
    { name: '얼룩말', age: 41 },
    { name: '기린', age: 56 },
];

// .button 요소의 이벤트 설정
document.querySelectorAll('.button').forEach((element) => {
    element.addEventListener('click', (event) => {
        onClickButton(event);
    });
});

/**
 * 버튼 클릭 시 처리
 */
function onClickButton(event) {
    // 클릭한 버튼의 요소
    const button = event.target;
    // 버튼 요소에서 data-age 가져오기
    const targetAge = button.dataset.age;
    // targetAge 이상의 유저 배열 생성
    const filterdList = userDataList.filter((data) => data.age >= targetAge);
    // 배열을 출력
    updateList(filterdList);
}

/** 
 * 유저의 배열을 출력
 */
function updateList(filterdList) {
    let listHtml = '';
    
    for (const data of filterdList) {
        listHtml += `<li>${data.name} : ${data.age}세</li>`;
    }
    
    document.querySelector('.user_list').innerHTML = listHtml;
}

 

실행결과

 

20세 이상 버튼 클릭했을 때 결과
30세 이상 버튼 클릭했을 때 결과
40세 이상 버튼 클릭했을 때 결과

클릭한 버튼에 따라 배열을 필터링 한다.

 


 

 

 

 

 

참조 :
실무에 바로 적용하는 자바스크립트 코드레시피 278
아케다 야스노부, 카노 타케시 지음 / 이춘혁 옮김