본문 바로가기

웹언어/자바스크립트 - ES6

[ES6강좌] 7강 Array객체의 메서드 추가 - 오쌤의 니가스터디

728x90
반응형

 

 

 

 

 

 

 

 

 

 

 

1. find() 메서드


- find() : 함수의 조건을 통과한 첫 번째 배열 요소 값을 반환하는 메서드입니다.

 

 

## 문법

find(함수명)

 

 

 

## 예제 - 20보다 큰 숫자 중자 중 첫번째 배열 요소를 찾음

var nums = [4,9,16,25,29];

function test(x){ //함수에 조건을 작성
	return x > 20;
}

document.write(nums.find(test));

- 결과는 문서에 20보다 큰숫자에서 첫 번째 배열 요소인 25가 나옵니다. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2. findIndex() 메서드


- findIndex() : 함수의 조건을 통과한 첫 번째 배열 요소의 인덱스 번호를 반환하는 메서드입니다.

 

 

## 문법

findIndex(함수명);

 

 

 

## 예제 - 20보다 큰 숫자 중자 중 첫번째 배열 요소의 인덱스 번호를 찾음

var nums = [4,9,16,25,29];

function test(x){ 
	return x > 20;
}

document.write(nums.findIndex(test));

- 25의 인덱스번호인 [3]을 반환합니다. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3. Array map()


map() 메서드는 배열에 함수를 호출하여 새로운 배열을 만듭니다. 이건 실제로는 ES5에 나왔던 메서드입니다.

- 각 요소에 대해 한 번씩 함수를 호출하고 빈 요소에 대해서는 함수를 실행하지 않습니다.

- 원래 배열은 변경되지 않고 새로운 배열을 만듭니다.

 

 

## 문법

array.map(function(currentValue, index, arr), thisValue);

- 함수 매개변수는 필수 작성입니다. 각 배열 요소에 대해 실행할 함수입니다.

- 함수 매개변수의 매개변수로 되어 있는 [ currentValue ] 는 현재 배열의 요소 값입니다. 영문을 무엇을 적든 상관없습니다. 역시 필수 요소입니다.

- 함수 매개변수의 매개변수로 되어 있는 [ index ] 는 현재 배열 요소의 인덱스 값입니다. 선택적 요소입니다.

- 함수 매개변수의 매개변수로 되어 있는 [ arr ] 는 현재 요소의 배열입니다. 선택적 요소입니다.

- [ thisValue ]는 this값으로 사용할 함수에 전달된 값입니다. 선택적 요소입니다. 

- 보통은 함수를 하나 적으면 됩니다. 

 

 

 

 

 

 

 

1) 배열 값을 제곱근으로 새로운 배열을 반환

## 코드 보기

<!DOCTYPE html>
<html lang="ko">
    <head>
        <meta charset="UTF-8">
        <title>JS - Array Method</title>
        <script>
            const nums = [4,9,16,25,36];
            const newNums = nums.map(Math.sqrt);

            document.write('기존배열값 : ' + nums + '<br>');
            document.write('제곱근배열값 : ' + newNums + '<br>');
        </script>
    </head>
    <body>
        
    </body>
</html>

- [ Math.sqrt ]는 제곱근을 구하는 수학 객체의 속성입니다. 

 

 

 

## 결과 보기

- 결과가 잘 나오는 것이 확인됩니다.

 

 

 

 

 

 

 

 

 

 

 

 

2) 배열 값을 제곱으로 새로운 배열을 반환

## 코드 보기

<!DOCTYPE html>
<html lang="ko">
    <head>
        <meta charset="UTF-8">
        <title>JS - Array Method</title>
        <script>
            const nums = [3,5,6,7,9];
            const newNums = nums.map(square);

            function square(x){ //여기서 x는 기존 배열값
                return x * x;
            }

            document.write('기존배열값 : ' + nums + '<br>');
            document.write('제곱배열값 : ' + newNums + '<br>');
        </script>
    </head>
    <body>
        
    </body>
</html>

 

 

## 결과 보기

 

 

 

 

 

 

 

 

 

 

3) 배열의 값을 객체화했을  때 새로운 배열 반환

## 코드 보기

- 이번에는 어벤져스 멤버들 이름을 firstname과 lastname으로 나눠서 데이터를 처리하고 한 번에 반환해보겠습니다.

<!DOCTYPE html>
<html lang="ko">
    <head>
        <meta charset="UTF-8">
        <title>JS - Array Method</title>
    </head>
    <body>
        <h3>Avengers</h3>
        <ul id="avengersList">

        </ul>
        <script>
            const avengers = [
                { firstname: 'Tony', lastname: 'Stark' },
                { firstname: 'Steve', lastname: 'Rogers' },
                { firstname: 'Bruce', lastname: 'Banner' },
                { firstname: 'Thor', lastname: 'Odinson' },
                { firstname: 'Natasha', lastname: 'Romanoff' },
                { firstname: 'Clinton', lastname: 'Barton' }
            ];

            const ulTag = document.getElementById('avengersList');
            let liTag = '';

            function getFullName(item){
                return [item.firstname,item.lastname].join(" ");
            }

            avengersName = avengers.map(getFullName);

            for(let i in avengersName){
                liTag += '<li>' + avengersName[i] + '</li>';
            }

            ulTag.innerHTML = liTag;
        </script>
    </body>
</html>

- 배열객체의 [ join() ] 메서드는 배열을 문자열로 반환합니다.

- 매개변수를 통해서 배열 값 사이마다 문자열을 추가할 수 있습니다. 

- 그래서 위에서는 공백으로 설정해봤습니다.

 

 

 

## 결과 보기

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4. Array forEach()


- 배열을 반복할 때 사용하는 메서드입니다. 이건 실제로는 ES5에 나왔던 메서드입니다.

- [ forEach() ]는 배열 값 각각에 함수를 적용해서 처리합니다. 

 

 

 

 

 

1) forEach문 확인

 

 

## 문법

array.forEach(function(currentValue, index, arr), thisValue);

- 문법도  [ map() ]과 같기 때문에 따로 설명하지는 않도록 하겠습니다. 

 

 

 

## 코드 보기

- 이번에는 2022년 야구 정규시즌 순위를 표시해보겠습니다.

<!DOCTYPE html>
<html lang="ko">
    <head>
        <meta charset="UTF-8">
        <title>JS - Array Method</title>
    </head>
    <body>
        <h3>2022 KBO 정규리그순위</h3>
        <div id="listBox">

        </div>
        <script>
            const teams = ['SSG 랜더스','LG 트윈스','키움 히어로즈','KT 위즈','KIA 타이거즈','NC 다이노스','삼성 라이온즈','롯데 자이언츠','두산 베어스','한화 이글스'];
            const listBox = document.getElementById('listBox')
            let pTag = '';

            teams.forEach(teamsOutput);

            function teamsOutput(item, index){
                pTag += '<p>' + (index + 1) + '위 : ' + item + '</p>';
            }

            listBox.innerHTML = pTag;

        </script>
    </body>
</html>

- 배열(teams)에 프로야구 구단들을 담았습니다.

- 그리고 그것을 순위와 함께 배열 값을 각각 반환할 것이라서 [ teamsOutput ]이라는 함수의 매개변수에 [ item ]과 [ index ]를 둘 다 사용했습니다. 

 

 

 

## 결과 보기

- 결과가 이렇게 잘 나오는 것이 확인됩니다. 

 

 

 

 


 

 

 

 

2) map()과 forEach문 차이

- 위의 [ map() ]과 비슷해보이지만, [ map() ]은 새로운 배열로 사용된다면, [ forEach() ]는 배열 값 각각에 함수를 적용해서 처리합니다.

- 기존 배열이 바뀌지도 않고, 새로운 배열에 처리하려면  push() 메서드를 사용해야 합니다. 

 

## 코드 보기

- 2배를 처리하는 함수를 적용 후 콘솔창에 추가하면 어떻게 되는지 볼게요.

<!DOCTYPE html>
<html lang="ko">
    <head>
        <meta charset="UTF-8">
        <title>JS - Array Method</title>
    </head>
    <body>
        <script>
            const arr01 = [1, 2, 3, 4, 5];
            const newArr01 = arr01.map(item => item * 2);

            console.log(arr01); 
            console.log(newArr01); 

            console.log('============================'); 

            const arr02 = [1, 2, 3, 4, 5];
            const newArr02 = arr02.forEach(item => item * 2);
            const newArr03 = [];
            arr02.forEach(item => newArr03.push(item * 2));

            console.log(arr02); 
            console.log(newArr02); 
            console.log(newArr03); 
        </script>
    </body>
</html>

arr01 에 숫자 배열을 담고,  newArr01 에는  map() 을 통해서 2배값을 새롭게 반환했습니다.

- 그리고 콘솔 창에  arr01 과  newArr01 을 호출했습니다.

 arr02 에도 숫자 배열을 담고,  newArr02 에는 forEach() 을 통해서 2배값을 새롭게 작성했습니다.

newArr03 은 빈비열 처리하고, 아래 구문에는  forEach() 를 사용하여  push() 통해 각각의 요소 값을 마지막 배열 값으로 두배로 처리해서 담아 줍니다.

- 그리고 콘솔 창에  arr02 과  newArr02 newArr03 을 호출했습니다.

 

 

 

## 결과 보기

- 첫번째 줄은 원래 값이 잘 반환되었고, 두번째 줄도 map을 통해 두배값이 잘 반환됩니다.

- 세번째 줄도 원래 값으로 반환되고, 네번째 줄은  undefined 로 반환되지 않습니다. 그러니까  forEach() 는 배열을 만드는 메서드가 아닙니다. 

- 그리고 마지막 줄과 같이 반환이 되려면 굳이 빈배열을 선언하고 거기에  push () 메서드까지 사용해야 합니다.

- 이렇기 때문에 새로운 배열을 반환하고 싶었던 거라만  map() 를 사용해야 합니다. 

 

 

 

 

 

 

 


 

 

 

 

 

 

 

 

 

4. filter()


- 함수에서 제공하는 테스트를 통과하는 요소로 채워진 새 배열을 만듭니다. 원래 배열을 변경하지 않습니다.

- 빈 요소에 대해서는 함수를 실행하지 않습니다. 

- 역시 ES6가 아닌 ES5에서 나온 메서드입니다.

 

 

## 문법

array.filter(function(currentValue, index, arr), thisValue);

- 문법도  [ map() ]과 같기 때문에 따로 설명하지는 않도록 하겠습니다. 

 

 

 

## 코드 보기

- 이번에는 숫자 3,5,6,7,9 중 7만 제외하고 새로운 배열에 반환해보겠습니다. 

<!DOCTYPE html>
<html lang="ko">
    <head>
        <meta charset="UTF-8">
        <title>JS - Array Method</title>
        <script>
            const nums = [3,5,6,7,9];
            const newNums = nums.filter(misfortune);

            function misfortune(num){ 
                return num !== 7;
            }  
            document.write('기존배열값 : ' + nums + '<br>');
            document.write('7없는 배열값 : ' + newNums + '<br>');
        </script>
    </head>
    <body>
        
    </body>
</html>

- misfortune이라는 함수에 num값 중 7과 같지 않은 값만 반환합니다.

- 그것을 filter메서드의 매개변수로 담아 줍니다. 

 

 

 

## 결과 보기

- 결과가 이렇게 잘 나오는 것이 확인됩니다. 

 

 

 

 

 

 

 

 

 

 


 

 

 

 

 

 

 

 

 

 

 

6. ** - 지수연산자


- 지수 연산자는 ES7에서 나왔지만, 브라우저들이 인식을 잘하므로 예제를 보도록 하겠습니다.

 

 

## 예제

alert(5 ** 3); //5의 3승 - 5 * 5 * 5

- 5의 3승이라는 뜻으로 5 곱하기 5 곱하기 5로 결과는 [125]를 반환합니다. 

 

 

 

 

 

 

 

 

 

 

728x90
반응형