본문 바로가기

JavaScript & JQuery

JavaScript(6)

배열

다양한 타입의 데이터를 보관하는 하나의 묶음. 자료형 지정이 없어 모든 자료형 데이터로 저장가능

모든 자료형 (숫자, 문자열, 함수, Boolean, undefined, 객체)

let 변수 명 = [값1(숫자), 값2(문자), 값3(객체), 함수....]

 

* 변수라는 화물들을 배열라는 기차에 차례차례 순서대로 칸에 넣는 다고 생각하면 된다 *

 

변수
3

 

배열
1 2 3 4 5
arr [0] arr [1] arr [2] arr [3] arr [4]

배열의 장점

  • 연관된 데이터 관리 가능
  • 가독성이 좋아짐
  • 코드량 감소
  • 유지보수 용이
<script>
        function plus(a,b) { return a+b;}
        function minus(a,b) { return a-b;}
        function multiple(a,b) { return a*b;}
        // 위에 코드들을 아래처럼 표현할 수 있다.
        function calculator(a,b) {reutn [a+b, a-b, a*b];}
    </script>

배열 선언

값(리터럴)로 선언하는 방법과 생성자 (new Array)를 사용하여 선언하는 방법이 있음.

<h1>자바스크립트의 배열</h1>
    <p>
        배열에 다수의 자료형을 보관할 수 있음.<br>
        인덱스 번호(등번호)로 각 변수를 관리, 0부터 시작<br>
        길이 제한이 없고, 자동으로 증가함.
    </p>
    <script>
        // 1. 리터럴(값)로 선언하기
        let arr = [];
        let arr2 = ['해','달','별','구름'];
        // 2. 생성자로 선언하기
        let arr3 = new Array();
        let arr4 = new Array(4);
        let arr5 = new Array('나비','벌','무당벌레');
        console.log(arr);
        console.log(typeof arr);
        console.log(Array.isArray(arr2));
        console.log(Array.isArray({}));
    </script>

배열에 값 대입

값 입력시 index번호 활용 *번호 범위 0 ~ (지정크기 -1)

 

배열에 값 대입 : 배열 [첨자] = 값;

변수에 배열 값 대입 : 변수 = 배열 [첨자];

<h2>선언된 배열에 값 대입하기</h2>
    <p>
        선언된 배열에 인덱스로 대입하면 됩니다.
        자료형에 상관없이 저장할 수 있음.
    </p>
    <script>
        arr[0] = 100;
        arr[1] = '김가남';
        arr[2] = true;
        arr[3] = function(){};
        arr[4] = {};
        arr[5] = [];
        console.log(arr);
    </script>

배열의 사용

값 출력시 index번호와 반복문 활용 *번호 범위 : 0 ~ (지정 크기 -1)

배열명.length

배열의 길이, 반복문의 조건식에 주로 활용

<h2>배열의 사용</h2>
    <script>
        //배열의 길이
        console.log(arr.length);
        //반복문을 이용해서 출력하기
        for(let i = 0 ; i < arr.length ; i++){
            if(typeof arr[i] === 'object'){
                if(Array.isArray(arr[i])){
                    console.log(arr[i],'array');
                } else{
                    console.log(arr[i], typeof arr[i]);
                }
            } else{
                console.log(arr[i], typeof arr[i]);
            }
        }
    </script>

배열의 함수

Array 도 하나의 객체이기 때문에 배열에서 활용할 수 있는 함수가 있음

이름 설명
배열명.indexOf("값") 배열에서 요소가 위치한 인덱스 리턴
배열명.concat(배열명) 두 개 또는 세 개의 배열 끼리 결합
배열명.join() 배열을 결합하고 문자열로 반환
배열명.push('값') 배열의 맨 뒤에 요소 추가
배열명.unshift('값') 배열의 앞에 새로운 요소 추가
배열명.splice([index],제거 수, 추가값) 배열의 index 위치의 요소 제거, 추가
배열명.shift() 배열에서 첫번째 요소 제거
배열명.pop() 배열의 맨 뒤에 요소 제거
배열명.reverse() 배열의 순서를 뒤집음
배열명.sort() 배열을 내림차순/오름차순 정렬
배열명.slice() 배열의 요소 선택 잘라내기
배열명.toString() 배열을 문자열로 반환

indexOf

<h2>배열이 제공하는 함수 이용하기</h2>
        <h3>indexOf('찾을값')</h3>
        <p>매개변수로 전달된 값과 일치하는 요소를 찾아 인덱스 번호를 반환</p>
        <script>
            let name = ['철수','영희','길동'];
            console.log(name.indexOf('철수'));
            console.log(name.indexOf('개똥'));
        </script>

concat

<h3>concat() : 두개 이상의 배열을 합쳐주는 함수</h3>
        <script>
            let student = ['tom','json','maria','my'];
            let newStudent = ['amy','jacob'];
            let result = student.concat(newStudent);
            console.log(result);
        </script>

join

<h3>join() : 배열을 특정구문자 기준으로 문자열로 변환해주는 함수</h3>
        <script>
            result = student.join('/');
            console.log(result,typeof result);
        </script>

reverse

<h3>reverse() :  배열의 순서를 반대로 변경해주는 것</h3>
        <script>
            console.log(student);
            student.reverse();
            console.log(student);
        </script>

push

<h4>push():배열에 맨 마지막에 데이터를 추가</h4>
        <script>
            console.log(student);
            student.push('ruby');
            console.log(student);
        </script>

pop

<h4>pop() : 배열의 맨 마지막 요소를 삭제하는 함수</h4>
        <script>
            console.log(student);
            student.pop();
            console.log(student);
        </script>

shift

<h4>shift() : 0번 인덱스의 값을 삭제하는 함수</h4>
        <script>
            console.log(student);
            student.shift();
            console.log(student);
        </script>

unshift

<h4>unshift() : 0번 인덱스에 값을 추가하는 함수</h4>
        <script>
            console.log(student);
            student.unshift('java');
            console.log(student);
        </script>

includes

<h4>includes() : 배열에 매개변수로 전달된 값이 있는지 확인</h4>
        <script>
            student = ['tom','json','maria','my'];
            console.log(student.includes('maria'));
            if(student.includes('maria')){
                let i = student.indexOf('maria');
                console.log(i);
            } else{
                console.log('없다!!');
            }
        </script>

find

<h4>find() : 배열에 저장된 요소를 찾아서 한개의 값을 반환</h4>
        <p>배열명.find(function(element,index,array){});</p>
        <script>
            let nums = [333,2376,896,55];
            //2000이상인 값을 찾고 싶다!!
            result = nums.find(function(a,b,c){
                console.log(a);
                console.log(b);
                console.log(c);
                return atob > 300;
            });
            console.log(result);
        </script>

forEach

<h3>forEach() : 배열 데이터 전체를 순회</h3>
            <script>
                student.forEach((element,index)=>{
                    console.log(element,index);
                });
                student.forEach((element)=>{
                    console.log(element);
                });
            </script>

sort

<h3>sort() : 배열을 정렬해주는 함수</h3>
            <p>
                오름차순 =><br>
                배열명.sort(function(left,right){return left-right;});
                내림차순 => <br>
                배열명.sort(function(a,b){return b-a;});
            </p>
            <script>
                let numArr = [1,6,3,2,5,8,7];
                result = numArr.sort(function(a,b){
                    return a-b;
                });
                console.log(result);
                //내림차순
                //큰수가 앞에 와야돼요.
                //양수면 앞뒤자리 바꾸고, 음수면 그대로 두는 성질이 있음.
                result = numArr.sort(function(a,b){
                    return b-a;
                });
                console.log(result);
            </script>

filter

<h4>filter() : 배열에 저장된 요소를 찾아서 배열로 반환</h4>
            <script>
                nums = [333,2376,896,55];
                result = nums.filter(function(ele,index,array){
                    return ele>800;
                });
                console.log(result);
            </script>

map

<h4>map() : 배열에 저장된 요소를 조작하여 새로운 데이터를 가진 배열로 반환</h4>
            <script>
                result = nums.map(function(e,i,o){
                    return i %2 === 0 ?  e : e*2;
                });
                console.log(result);
            </script>

 

배열 연습문제

<h3>배열 연습문제</h3>
            <style>
                .div{
                    display: inline-block;
                    width: 100px; height: 25px;
                    text-align: center;
                }
                #div1{ border:1px solid crimson; }
                #div2{ border:1px solid coral; }
                #div3{ border:1px solid gold; }
            </style>
            <div class="div" id="div1">?</div>===<div class="div" id="div2">?</div>===<div class="div" id="div3">?</div>
            <button onclick="showArr();">버튼</button>
            <script>
                let showArr = () =>{
                    let arr = [0,1,2];
                    //arr[0], arr[1], arr[2];
                    document.getElementById('div1').innerHTML = arr[0];
                    document.getElementById('div2').innerHTML = arr[1];
                    document.getElementById('div3').innerHTML = arr[2];
                }
            </script>
<h1>배열 실습 문제1번</h1>
    <fieldset>
        <legend>보기</legend>
        <label id="stringla1">n o l e m</label><br>
        <label id="stringla2">r e t a w</label><br>
    </fieldset>
    <div id="result1">
        이 부분에 정답이 출력!
    </div><br>
    <input type="button" id="result1" value="처리" onclick="concatStr();"/>
    <script>
        let concatStr = function(){
            // 어떤 데이터를 처리할꺼냐 -> 처리할 데이터
            let str1 = document.querySelector('#stringla1').innerHTML;
            let str2 = document.querySelector('#stringla2').innerHTML;
           
            // 작업을 하려면 데이터의 자료형이 (array 배열)
            // 현재 데이터의 자료형이 string(문자)
            // 문자를 배열로 바꿔주는 함수는 무엇인가?
            let arr1 = str1.split(' ');
            let arr2 = str2.split(' ');

            // 하나의 글자로 watermelon을 출력하고 싶다.
            // 현재 2개의 데이터로 나누어져 있다.
            // 합쳐야겠다 -> concat
            // 합치니깐 거꾸로 되어 있다 -> reverse
            // div에 출력하고 싶은 형태는 string
            // 그런데 현재 자료형은 array이다.
            // 다시 array -> string으로 바꿔야 겠다.
            let result;
            result = arr1.concat(arr2);
            result = result.reverse();
            result = result.join('');
           
            document.querySelector('#result1').innerHTML = result;
        }
    </script>

    <h1>배열 실습 문제2번</h1>
    <fieldset>
        <legend>입력</legend>
        <input type="text" id="str"/>
        <input type="button" onclick="addStr();"  value="입력"/>
    </fieldset>
    <div id="result2">
        이 부분에 정답이 출력 될 수 있도록 하세요
    </div>
    <br>
    <button onclick="printResult();">출력</button>
    <script>
        // 우리가 뭘 하고싶은가?
        // 입력창에 글자를 입력하면 배열에 추가가 되야하고
        // 최종적으로 출력버튼을 클릭하면 우리가 만든 배열이 출력 되어야 한다.
        // 1. addStr 안에 배열($arr을 적어줬어요.
        // 2. $arr을 addStr에서도 쓰고 싶고, printResult에도 쓰고 싶어졌음
        // 3. $arr을 밖으로 빼줘야 겠다!!
        // (let 키워드를 활용해서 변수를 선언하면 블록 안에서만 쓸 수 있기 때문에)

        let $arr = [];
        let addStr = () => {
            // 데이터 가져오기
            const text = document.querySelector('#str');
            // 데이터
            $arr.push(text.value);
            text.value ='';
        }
        let printResult = function(){
            // 데이터 출력하기
            document.getElementById('result2').innerHTML = $arr;
        }
    </script>
    <fieldset>
        <legend>보기</legend>
        <span id="origin_text">피자 치킨 당근 햄버거 떡볶이</span>
    </fieldset>
    <br>
    <input type="text" id="delete_food" placeholder="삭제할 음식이름을 입력하세요"/>
    <input type="text" id="add_food" placeholder="추가할 음식이름을 입력하세요"/>
    <br><br>
    <div id="result_div">
        이 부분에 정답이 출력!
    </div>
    <button onclick="processArr();">처리 및 출력</button>
    <script>
        const processArr = function(){
            // 받아올 데이터가 뭐냐?
            // 기존에 text를 받아온다
            // 기존 text , 삭제할 음식이름, 추가할 음식이름
            const ori = document.querySelector('#origin_text').innerText;
            const addText = document.querySelector('#add_food').value;
            const deleteText = document.querySelector('#delete_food').value;

            //string 형태인 ori 변수를 array로 바꿔주자
            const arr = ori.split(' ');
            console.log(arr);

            // 사용자가 삭제하고 싶은 음식이 위치가 어딘지 파악
            // 그부분의 데이터를 추가할 음식으로 변경
            // 1. 사용자가 삭제하고 싶은 음식의 위치 -> indexOf
            // 2. 사용자가 삭제하고 싶은 음식의 위치에 추가하고 싶은 음식을 입력
            const deleteIdx = arr.indexOf(deleteText);
            arr[deleteIdx] = addText;
           
            // 1. 화면에 arr출력
            // 2. 배열을 출력하는데 배열 원래 모양대로가 아니라 ,를 띄어쓰기로 바꿔서 출력
            // => join함수를 써야겠구나!!
            document.querySelector('#result_div').innerHTML = arr.join(' ');
        }
    </script>

'JavaScript & JQuery' 카테고리의 다른 글

JQuery serialize()를 사용하는 이유  (0) 2024.03.07
JavaScript(7)  (2) 2023.08.27
JavaScript(5)  (0) 2023.08.27
JavaScript(4)  (2) 2023.08.27
JavaScript(3)  (2) 2023.08.27