멋쟁이v의 개발일지

[Javascript] 배열 본문

0년차/Javascript

[Javascript] 배열

멋쟁이v 2023. 4. 29. 15:39
728x90
320x100
📕

[목차]


01. 배열이란?

💡
➡️ 하나의 저장소에 여러 데이터 타입을 저장 할 수 있는 방법입니다.

➡️ 공간에 생기는 주소를 index라고 한다.

➡️ index의 처음 시작 주소는 0번부터 시작된다.

➡️ index를 활용하여 배열에 접근이 가능하며, 접근이 되었다면 값을 저장하거나 값을 가져올 수 있다.

02. 배열 선언

💡
선언 방법 1️⃣ const arr1 = []; ➡️ good 2️⃣ const arr2 = new Array(); ➡️ 내장객체
  • [코드예제] 배열 선언
    // 배열선언 키워드 : const 선언
    // 인수가 1개 일 때 공간을 의미
    const arr3 = new Array(3);
    console.log(arr3); // 3 empty
    
    // 배열 선언 및 초기화
    const arr4 = [1, 2, 3, 4]; // good
    // Array() 인수가 두개 이상일 경우 요소를 의미
    const arr5 = new Array(1, 2, 3, 4, 5); // bad
    console.log(arr4); // 1, 2, 3, 4
    console.log(arr5); // 1, 2, 3, 4, 5
    
    // 배열에 어떠한 데이터 타입이든 요소 삽입이 가능하다.
    const arr6 = ['가', 1, '나', true, null, undefined, [1,2,3]];
    console.log(arr6);

03. 배열 값 저장 및 접근

💡
변수명[인덱스] = 값;
  • [코드예제] 배열 값 대입 및 접근
    const arr7 = [1, 2];
    console.log(arr7[0], '배열 변수의 인덱스 번호로 요소 접근');
    arr7[3] = 4;
    console.log(arr7); // 1, 2, empty, 4

04. 배열객체의 속성 및 메서드

💡
length, push(), pop(), splice(), Array.isArray() 등
  • [코드예제] 속성과 메서드
    // length : 배열의 크기를 알수 있는 속성
    const arr8 = [1, 2];
    console.log(arr8.length, 'arr8의 배열의 크기');
    
    // push() : 배열에 값을 삽입하는 메서드
    let result1 = arr8.push(3);
    arr8.push(4, 5);
    console.log(result1, arr8);
    
    // pop() : 배열의 마지막 요소 제거 후 제거된 요소 반환
    let result2 = arr8.pop();
    console.log(result2, arr8);
    
    // splice(삭제를 시작할 인덱스, 삭제할 요소수) : 특정배열 요소 삭제
    let result3 = arr8.splice(1, 2);
    console.log(result3, arr8);
    
    // Array.isArray(배열 변수명) : 배열 여부 확인
    console.log(Array.isArray(result1), 'result1 배열여부확인');
    console.log(Array.isArray(result3), 'result3 배열여부확인');

05. 얕은복사와 깊은복사

💡
얕은복사 ➡️ 새로운 복합 객체를 만들고,(가능한 범위까지) 원본 객체를 가리키는 참조를 새로운 복합 객체에 삽입/복사 후 같은 주소를 참조 (인스턴스 생성 ex) == '주소 값'을 복사한다는 의미 깊은복사 ➡️ 새로운 복합 객체를 만들고, 재귀적으로 원본 객체의 사본을 새로 만든 복합 객체에 삽입/복사 후 다른 주소를 참조 (인스턴스 생성 o) == '실제 값'을 새로운 메모리 공간에 복사하는 것을 의미
  • [코드예제] 얕은복사, 깊은복사
    const targetArr1 = [1, 2, 3, 4];
    const shallowCopyArr = targetArr1; // 주소 값만 복사
    console.log(targetArr1 == shallowCopyArr, 'true 얕은복사');
    shallowCopyArr[2] = 5;
    console.log(targetArr1); // 1, 2, 5, 3, 4
    console.log(shallowCopyArr); // 1, 2, 5, 3, 4
    
    const targetArr2 = [1, 2, 3, 4];
    const deepCopyArr = []; // 새롭게 객체 생성
    for(let num of targetArr2) {
    	deepCopyArr.push(num);
    }
    console.log(targetArr2 == deepCopyArr, 'false 깊은복사');
    deepCopyArr[2] = 5;
    console.log(targetArr2); // 1, 2, 3, 4
    console.log(deepCopyArr); // 1, 2, 5, 3, 4

06. 배열 실습

  • [코드예제] 배열과 반복문1
    const arr = [
    							'서강준',
                  '손석구',
                  '카리나',
                  '태연',
                  '뉴진스',
                  '아이유'
                ];
    for(let idx = 0; idx < arr.length; idx++) {
        console.log(arr[idx], `배열의 ${idx}번째 요소`);
    }
    
    // for of 배열을 순회하면서 배열요소를 변수에 담는다.
    let idx=0;
    for(let name of arr) {
        console.log(name, `배열의 ${idx++}번째 요소`);
    }
    
    // for in 배열을 순회하면서 배열의 인덱스를 변수에 담는다.
    // 객체(Java : Class로 생성된 객체)
    for(let idx in arr) {
        console.log(arr[idx], `배열의 ${idx}번째 요소`);
    }
    

  • [코드예제] 배열과 반복문2
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <link rel="shortcut icon" href="#" type="image/x-icon">
    		<title>배열과 반복문 실습</title>
    </head>
    <body>
    	<h1>배열과 반복문</h1>
    	<h2>실습1</h2>
    	실습. 아래의 배열의 요소에 접근하여 콘솔에 차례대로 출력 하도록 하시오.
    	<script type="text/javascript">
    
    		const arr1 = ['손흥민', '김민재', '황희찬', '황의조', '이강인', '김승규'];
    		
    		for(let idx = 0; idx < arr1.length; idx++) {
    			console.log(arr1[idx], 'for문 사용');
    		}
    
    		for(let name of arr1) {
    			console.log(name, 'for_of 사용');
    		}
    
    		for(let idx in arr1) {
    			console.log(arr1[idx], 'for_in 사용');
    		}
    
    		let idx = 0;
    		while(idx < arr1.length){
    			console.log(arr1[idx], 'while문 사용');
    			idx++
    		}
    		
    	</script>
    
    	<h2>실습2</h2>
    	실습. 아래의 배열의 요소에 접근하여 이름만 콘솔에 차례대로 출력 하도록 하시오.
    	ex) 손흥민, 황희찬, 이강인, 김승규
    	<script type="text/javascript">
    
    		const arr2 = [4, '손흥민', 1, '황희찬', 2, '이강인', '김승규', 3, undefined, null, true];
    		
    		let isFrist = true;
    		let namePrint = '';
    		for(let name of arr2) {
    			if(typeof name == 'string'){
    				if(isFrist) {
    					namePrint += name;
    					isFrist = false;
    				} else {
    					namePrint += `, ${name}`;
    				}
    			}
    		}
    		console.log(namePrint);
    
    	</script>
    
    	<h2>실습3</h2>
    	실습. 배열에 담긴 숫자형 값 중 짝수만 찾아 합산하여 그 결괏값만 출력하시오.
    	실습. 추출한 짝수만 evenArray 참조변수(배열)에 담으시오
    	<script type="text/javascript">
    
    		var nArr = [13,15,20,22,35,50,70,99];
    
    		let evenTotal = 0;
    		const evenArray = [];
    		for(let num of nArr) {
    			if(num%2 == 0) {
    				evenTotal += num;
    				evenArray.push(num);
    			}
    		}
    		console.log(`짝수의 합 : ${evenTotal}\n짝수배열 : ${evenArray}`);
    		
    	</script>
    
    	
    	<h2>실습4</h2>
    	실습. 아래의 배열에 학생의 점수가 담겨 있다. 학생들의 평균 점수를 구하시오.
    	<h2>실습5</h2>
    	실습. 아래의 배열에 학생의 점수가 담겨 있다. 60점 이상인 학생 수를 구하시오.
    	<script type="text/javascript">
    
    		var oddArr01 = [60, 70, 55, 60, 80, 99];
    
    		let total = 0;
    		let cut = [];
    		for(let num of oddArr01) {
    			total += num;
    			if(num >= 60) cut.push(num);
    		}
    		console.log(`평균점수 : ${parseInt(total/oddArr01.length)}점`);
    		console.log(`60점 이상 : ${cut.length}명`);
    
    	</script>
    
    	<h2>실습6</h2>
    	실습. 0~1000까지 홀수인 숫자만 배열에 담으시오. 홀수들의 합산을 구하시오.
    	<script type="text/javascript">
    		var oddArr01 = [];
    
    		let oddSum = 0;
    		for(let i = 0; i <= 1000; i++) {
    			if(i%2 == 1) {
    				oddArr01.push(i);
    				oddSum += i
    			}
    		}
    		console.log(`홀수배열 : ${oddArr01}\n합산 : ${oddSum.toLocaleString('ko-KR')}`);
    		
    	</script>
    </body>
    </html>

  • [코드예제] 배열 테이블
    var student = [
                    '헤리케인', '히샬리송', '모우라', '페리시치',
                    '세세뇽', '요리스', '에릭다이어', '벤데이비스',
                    '산체스', '손흥민', '후보1', '후보2', '후보3'
                ];
    
    
    let colSize = 6;
    let html = `<table border="1" style="width:400px; table-layout:fixed;">\n`;
    let thead = `\t<thead>\n\t\t<tr>\n`;
    let tbody = `<tbody style="text-align:center;">\n\t\t<tr>\n`;
    let lastIdx = (student.length - 1);
    
    for(let idx = 0; idx < student.length; idx++) {
    
        // thead th 구현 => colsize만큼
        if (idx < colSize) thead += `\t\t\t<th style="width:calc(400px/3)">${idx+1}조</th>\n`;
    
        // tr 구현
        if(idx % colSize == 0 && idx > 0) tbody += `\t\t</tr>\n\t\t<tr>\n`
    
        // td 배열의 크기만큼
        tbody += `\t\t\t<td>${student[idx]}</td>\n`;
    
        // 셀 병합 미정 구현
        if(idx == lastIdx && student.length % colSize > 0) {
            let size = colSize - (student.length % colSize);
            let colspan = (size > 1) ? ` colspan = "${size}"` : ``;
            tbody += `\t\t\t<td${colspan}>미정</td$>\n`;
        } 
    }
    
    html += `${thead}\t\t</tr>\n\t<thead>\n\t${tbody}\t\t</tr>\n\t</tbody>\n</table>`;
    
    console.log(html);
    document.write(html);

  • [코드예제] 배열 2개 값 출력
    /* 
    실습. 아래에 학생의 점수와 학생의 목록이 담긴 배열이 있다.
    이 두 배열은 요소의 순서가 일치하는 점수와 학생목록이다.
    최고의 점수를 받은 학생의 명을 출력하도록 하시오.
    최소의 점수를 받은 학생의 명을 출력하시오
    */
    const scoreArr = [70,60,70,80,55,80];
    const studentArr = ['A', 'B', 'C', 'D', 'E','F'];
    
    let maxScore = scoreArr[0];
    let minScore = scoreArr[0];
    
    const maxScoreStudentArr = [];
    const minScoreStudentArr = [];
    
    for(let idx = 1; idx < scoreArr.length; idx += 1) {
        if(maxScore < scoreArr[idx]) {
            maxScore = scoreArr[idx];
        }
        if(minScore > scoreArr[idx]) {
            minScore = scoreArr[idx];
        }
    }
    
    for(let idx in scoreArr) {
        if(scoreArr[idx] == maxScore) {
            maxScoreStudentArr.push(studentArr[idx]);
        }
    
        if(scoreArr[idx] == minScore) {
            minScoreStudentArr.push(studentArr[idx]);
        }
    }
    
    console.log(`최고점을 받은 학생명: ${maxScoreStudentArr}`);
    console.log(`최저점을 받은 학생명: ${minScoreStudentArr}`);


tag : #javascript #배열 #선언 #인덱스 #배열객체 #얕은복사 #깊은복사


Uploaded by N2T

728x90
320x100
Comments