본문 바로가기

TIL/JavaScript

[JavaScript] 함수-2, 배열

함수의 반환형

- return문이 없거나 return 지시자만 있는 함수는 undefined를 반환

 

1~100 사이의 랜덤값을 반환하는 함수

<script>

        function returnFunction() {
            return Math.floor(Math.random() * 100) + 1;
        }

        function test1() {
            for(let i = 0; i <= 10; i++) {
                let random = returnFunction();
                console.log('random' + i + " : " + random);
            }
        }
        test1();
    </script>

 

콜백 함수

 <script>
        function test3(func1, func2){
            let name = func1();
            let age = func2();

            console.log('이름 : ' + name + ', 나이 : ' + age);
        }

        function question1() {
            return prompt("당신의 이름은?");
        }

        function question2() {
            return prompt("당신의 나이는?");
        }

        test3(question1, question2);
    </script>

 


배열이란?

- 자바스크립트에서는 "모든 자료형"을 보관하는 변수의 모음을 배열로 처리한다.

- 자바에서의 컬렉션과 유사하다.

 

<script>
        function test1() {
            let arr = ['홍길동', 20, true, [1, 2, 3, 4]];

            //배열 출력
            console.log(arr);
        }
        test1();
    </script>

 

문자열과 더해지면서 toString() 호출하여 "," 기준으로 합쳐진 문자열이 반환됨

console.log('arr : ' + arr);

 

인덱스로 접근

            console.log(arr[0]);
            console.log(arr[1]);
            console.log(arr[2]);
            console.log(arr[3]);

 

배열 안의 배열 인덱스 접근

            console.log(arr[3][0]);
            console.log(arr[3][1]);
            console.log(arr[3][2]);
            console.log(arr[3][3]);

 

배열의 선언

- 배열 선언 시 배열의 크기를 정하거나, 정하지 않고 선언할 수 있다.

 

new Array()로 배열 생성

            let arr1 = new Array();
            let arr2 = new Array(3);
            
            console.log(arr1);
            console.log(arr2);
            
            console.log(arr1.length);
            console.log(arr2.lenght);

arr1, arr2 배열 출력
&amp;amp;nbsp;arr1, arr2 길이 출력

 

            arr2[100] = '테스트';
            console.log(arr2);
            console.log(arr2.length);

배열 길이가 101이 된다.

length는 요소 내 개수가 아니라 가장 큰 인덱스에 1을 더한 값이 된다.

 

length에 0을 기록하면 값 삭제도 가능하다

            arr2.length = 0;
            console.log(arr2);

 

배열에 값 대입

            arr1[0] = '바나나';
            arr1[1] = '복숭아';
            arr1[2] = '키위';

 

new 연산자를 활용한 초기화

            let arr3 = new Array('뽀로로', '쥬쥬', '티니핑');
            console.log(arr3);

 

대괄호를 활용한 초기화

            let arr4 = ['Java', 'Oracle', 'HTML5', 'CSS3'];
            console.log(arr4);

 

배열 순회

- 일반 for문, for of문 등을 사용할 수 있다.

 

for문

                let arr = ['Java', 'Oracle', 'HTML5', 'CSS3', 'JavaScript'];

                for(let i = 0; i < arr.length; i++){
                    console.log(arr[i]);

 

for of문 이용

                for(let subject of arr){
                    console.log(subject);

 

배열 객체의 메소드

배열도 하나의 객체이기 때문에 배열에서 활용할 수 있는 메소드들이 있다.

 

요소 추가/제거

 

push : 배열의 맨 뒤에 요소 추가

pop : 배열의 맨 뒤에 요소 제거

        function test4(){
            let arr = ['짜장면', '짬뽕', '우동'];

            console.log('push 전 arr : ' + arr);

            arr.push('탕수육', '양장피');

            console.log('push 후 arr : ' + arr);

            console.log('arr.pop() : ' + arr.pop());
            console.log('arr.pop() : ' + arr.pop());
            console.log('arr.pop() : ' + arr.pop());

            console.log('pop후 arr : ' + arr);

        }
        test4();

 

shift : 배열의 맨 앞 요소 제거 후 반환

unshift : 배열의 맨 앞에 요소 추가

        function test5() {
            let arr = ['양념치킨', '후라이드', '파닭'];

            console.log('unshift 전 arr : ' + arr);

            arr.unshift('간장치킨', '마늘치킨');

            console.log('unshift 후 arr : ' + arr);

            console.log('arr.shift() : ' + arr.shift());
            console.log('arr.shift() : ' + arr.shift());
            console.log('arr.shift() : ' + arr.shift());

            console.log('shift후 arr : ' + arr);
        }
        test5();

 

 

slice : 배열의 요소 선택 잘라내기

- slice(시작 인덱스, 종료 인덱스)

- 원본 배열에 영향을 미치지 않음

 

splice : 배열의 index 위치의 요소 제거 및 추가

- splice(index, 제거수, 추가값1, 추가값2, ...)

- 제거 된 값을 리턴하며 원본 배열에 영향을 미침

        function test6() {
            let arr = ['하나', '둘', '셋', '넷'];
            console.log('arr : ' + arr);

            console.log('arr.slice(2, 4) : ' + arr.slice(2, 4));
            console.log('arr : ' + arr);
            
            console.log('arr.splice(2, 1, "다섯") : ' + arr.splice(2, 1, "다섯"));
            console.log('arr : ' + arr);
        }
        test6();

 

concat : 두 개 이상의 배열을 결합

        function test7() {
            let arr1 = ['하나', '둘', '셋'];
            let arr2 = ['넷', '다섯'];

            let arr3 = arr1.concat(arr2);
            let arr4 = arr2.concat(arr1, arr3);

            console.log(arr1);
            console.log(arr2);
            console.log(arr3);
            console.log(arr4);
        }

 

배열 forEach

배열.forEach(function(item, index, array){
       // 배열 요소 각각에 실행할 기능 작성
});
        function test8() {
            let arr = [1, 2, 3, 4, 5];

            arr.forEach(function(item, index, array){
                console.log(item + " " + index + " " + array);
            });
            //각 요소 별로 *10 한 값을 콘솔에 출력
            arr.forEach(item => console.log(item * 10));
        }
        test8();

 

배열 탐색

 

indexOf : 배열에서 요소가 위치한 인덱스를 리턴

lastIndexOf : 배열의 요소가 위치한 마지막 인덱스를 리턴

includes : 배열에 해당 요소 포함 여부 리턴

        function test9() {
            let arr = ['파스타', '피자', '햄버거', '순댓국', '파스타'];

            console.log(arr.indexOf('파스타'));
            console.log(arr.indexOf('파스타', 1));
            console.log(arr.indexOf('삼겹살'));

            console.log(arr.lastIndexOf('파스타'));
            console.log(arr.lastIndexOf('삼겹살'));

            console.log(arr.includes('파스타'));
            console.log(arr.includes('삼겹살'));
        }
        test9();

 

배열 변형

 

map : 배열 요소 전체를 대상으로 함수 호출 후 결과 배열로 반환

배열.map(function(item, index, array){
       // 배열 요소 각각에 반환할 새로운 값
});
        function test10() {
            let types = [true, 1, 'text'].map(item => typeof item);
            console.log(types);

            let lengths = ['사과', '바나나', '포도', '배', '딸기'].map(item => item.length);
            console.log(lengths);
        }
        test10();

 

sort : 배열을 정렬 기준으로 정렬

reverse : 배열의 순서를 뒤집음

 

* sort, reverse 수행 시 원본 데이터의 순서 자체가 변함   

        function test11() {
            let arr = [];

            for(let i = 0; i < 10; i++){
                arr[i] = Math.floor(Math.random() * 100) + 1;
            }
            console.log('정렬 전 arr : ' + arr);

            arr.sort();
            console.log('정렬 후 arr : ' + arr);
        }
        test11();

오름차순 정렬이 기본이며 정렬 후 정렬 순서를 유지함

배열은 기본적으로 문자열 정렬이 되므로 한자리수, 세자리수가

올바르지 않게 정렬 되는 모습을 확인할 수 있음

=> 다른 정렬 기준을 사용하려면 매개변수로 compare 함수 전달

            //숫자 오름차순 정렬
            arr.sort(compare);
            console.log('매개변수로 compare함수 전달하여 숫자 오름차순 정렬');
            console.log(arr);
        }
        function compare(a, b){
            if(a > b) return 1;
            if(a == b) return 0;
            if(a < b) return -1;

 

            //숫자 내림차순 정렬
            // arr.sort(function(a, b){
            //     return b - a;
            // });

            arr.sort((a, b) => b - a);


            console.log('숫자 내림차순 정렬');
            console.log(arr);

            arr.reverse();
            console.log('reverse 호출 후 arr : ' + arr);

 

split : 문자열 구분자로 잘라 배열로 반환

join : 배열을 구분자로 결합하여 문자열로 반환

        function test12(){
            let arr = ['사탕', '초콜렛', '껌', '과자'];
            console.log(arr);
            console.log(arr.join());
            console.log(arr.join("/"));

            let str = arr.join("*");
            console.log(str);
            console.log(str.split("*"));
        }
        test12();