본문 바로가기

기록(노트)

while문(짝수 합 출력하기, 별모양 트리 나무 만들기) /JavaScript 배열 및 arr[arr.length] 이해

숙제

? 이거 왜쓰는지 알아오기

<% %>이거 왜 쓰는지 알아오기

스코프 조금 더 개념 확실하게 해서 알아오기

 

 

<h2>실습3</h2>
    실습3. 1~100까지 반복되는 for문 작성 후 짝수와 짝수의 합을 출력하시오.
    <hr>
    짝수: 2, 4, 6, 8, ....<br>
    짝수들의 합: 2550

해설

let evenNums ='';
	let evenSum =0;
	let isFirst = true;
	//5%2 =1 -> 1:홀수, 0:짝수
	for(let i=1; i<101; 1+=1){
		if(i%2 ==0) {
			if(isFirst) {
				evenNums += i;
				isFirst = false;
			}else{
				evenNums += `, ${i}`
			}
			evenSum +=i;
		}
	}
	console.log(`짝수: ${evenNums}\n짝수들의 합: ${evenSum}`);
	</script>

isFirst는 처음값만 true로 가니 evenNums +=i;로 가고

두번째부터는 isFirst값이 false가 되니 evenNums +=`, ${i}`로 감

 

 

 

 

 

문제

<h2>실습5</h2>
    실습5. 구구단을 아래의 포맷방식으로 출력하시오.
    <hr>
    ----2단----<br>
    2 x 1 = 02<br>
    2 x 2 = 04<br>
    2 x 3 = 06<br>
    2 x 4 = 08<br>
    2 x 5 = 10<br>
    2 x 6 = 12<br>
    2 x 7 = 14<br>
    2 x 8 = 16<br>
    2 x 9 = 18<br>
    <hr>
    ----3단----<br>
    3 x 1 = 03<br>
    3 x 2 = 06<br>
    3 x 3 = 09<br>
    3 x 4 = 12<br>
    3 x 5 = 15<br>
    3 x 6 = 18<br>
    3 x 7 = 21<br>
    3 x 8 = 24<br>
    3 x 9 = 27<br>
    <hr>
    ----4단----<br>
    4 x 1 = 04<br>
    4 x 2 = 08<br>
    4 x 3 = 12<br>
    4 x 4 = 16<br>
    4 x 5 = 20<br>
    4 x 6 = 24<br>
    4 x 7 = 28<br>
    4 x 8 = 32<br>
    4 x 9 = 36<br>
    <hr>
    ----5단----<br>
    5 x 1 = 05<br>
    5 x 2 = 10<br>
    5 x 3 = 15<br>
    5 x 4 = 20<br>
    5 x 5 = 25<br>
    5 x 6 = 30<br>
    5 x 7 = 35<br>
    5 x 8 = 40<br>
    5 x 9 = 45<br>
    <hr>
    ----6단----<br>
    6 x 1 = 06<br>
    6 x 2 = 12<br>
    6 x 3 = 18<br>
    6 x 4 = 24<br>
    6 x 5 = 30<br>
    6 x 6 = 36<br>
    6 x 7 = 42<br>
    6 x 8 = 48<br>
    6 x 9 = 54<br>
    <hr>
    ----7단----<br>
    7 x 1 = 07<br>
    7 x 2 = 14<br>
    7 x 3 = 21<br>
    7 x 4 = 28<br>
    7 x 5 = 35<br>
    7 x 6 = 42<br>
    7 x 7 = 49<br>
    7 x 8 = 56<br>
    7 x 9 = 63<br>
    <hr>
    ----8단----<br>
    8 x 1 = 08<br>
    8 x 2 = 16<br>
    8 x 3 = 24<br>
    8 x 4 = 32<br>
    8 x 5 = 40<br>
    8 x 6 = 48<br>
    8 x 7 = 56<br>
    8 x 8 = 64<br>
    8 x 9 = 72<br>
    <hr>
    ----9단----<br>
    9 x 1 = 09<br>
    9 x 2 = 18<br>
    9 x 3 = 27<br>
    9 x 4 = 36<br>
    9 x 5 = 45<br>
    9 x 6 = 54<br>
    9 x 7 = 63<br>
    9 x 8 = 72<br>
    9 x 9 = 81<br>
    <hr>
<script type="text/javascript">
	for(let times =2; times <10; times +=1){
		let timesPrint = `------${times}-------\n`;
		
		for(i=1; i<10; i++){
			let result = (times*i) <10 ? `0${(times*i)}`
											:(times*i);
			timesPrint += `${times} X ${i} = ${result}\n`;
		}
		console.log(timesPrint);
	}
	</script>

 

 

 

 

배열

- 하나의 저장소를 분할하여 데이터를 저장하는 객체
- 나눠진 데이터의 저장소(요소)의 주소는 index라고 한다.
- index는 0부터 시작된다.
- 배열 객체에 담긴 대상을 요소(원소) 라고 한다.

 

 

 

 

 

예시)

//int[] arr3 = new int[3];
        //인수1개 일 때 공간의 의미
        const arr3 = new Array(3);
        console.log(arr1);
        console.log(arr2);
        console.log(arr3);
       
        //배열을 선언 및 초기화
        const arr4 = [1,2,3,4]; //good
        //Array() 인수가 두 개 이상일 경우 요소를 의미
        const arr5 = new Array(1,2,3,4,5); //bad
        console.log(arr4);
        console.log(arr5);

        //배열에 어떠한 데이터 타입이든 요소 삽입이 가능하다.
        const arr6 = ['가', 1, '나', true, null, undefined, [1,2,3]];
        console.log(arr6);

        //배열의 시작 주소는 0부터 시작한다.
        const arr7 = [1,2];
        console.log(arr7[1], '배열 변수의 인덱스 번호로 요소 접근');
        arr7[3] = 4;
        console.log(arr7);

 

 

답)

 

 

 

 

 

 

 

 

 

 

배열에 값 대입 및 접근

- 배열의 인덱스로 배열의 값에 접근 혹은 대입이 가능하다.

배열객체의 속성 및 메서드

(객체에는 속성과 메서드가 있다.)
- length : 배열의 크기를 알수 있는 속성
- push() : 배열에 값을 삽입하는 메서드
- pop() : 배열의 마지막 요소 제거 후 제거된 요소 반환
- splice(삭제를 시작할 인덱스, 삭제할 요소수) : 특정배열 요소 삭제
- Array.isArray(배열 변수명) : 배열 여부 확인(배열인지 아닌지 boolean으로 알려줌)

 

얕은복사 vs 깊은복사(shallow copy deep copy javascript)

- 얕은복사: 새로운 복합 객체를 만들고,(가능한 범위까지) 원본 객체를 가리키는 참조를 새로운 복합 객체에 삽입
복사 후 같은 주소를 참조 (인스턴스 생성 x)
'주소 값'을 복사한다는 의미
- 깊은복사: 새로운 복합 객체를 만들고, 재귀적으로 원본 객체의 사본을 새로 만든 복합 객체에 삽입
복사 후 다른 주소를 참조 (인스턴스 생성 o)
'실제 값'을 새로운 메모리 공간에 복사하는 것을 의미

 

왜 중요한지 코드로 설명

'실제 값'을 변화시키지 않기 위해, 복사꺼는 새롭게 객체로 생성을 하기때문에

console.log(targetArr1 != shallowCopyArr); 
이게 같지 않다! 
<h2>배열에 값 대입 및 접근</h2>
    - 배열의 인덱스로 배열의 값에 접근 혹은 대입이 가능하다.
   
    <script type="text/javascript">
        const targetArr1 = [1,2,3,4];
        const shallowCopyArr = targetArr1; // 주소값만 복사
        console.log(targetArr1 == shallowCopyArr, 'true일 경우 얕은복사');
        shallowCopyArr[2] = 5;
        console.log(targetArr1);
        console.log(shallowCopyArr);

        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);
        console.log(deepCopyArr);
       
    </script>

답)

 

 

 

 

배열과 반복문의 이해(in, of, arr)

<script type="text/javascript">
        const arr = [
                        '서강준', //1 0
                        '손석구',//2 1
                        '카리나',//3 2
                        '태연',//4 3
                        '뉴진스',//5 4
                        '아이유',//6 5
                    ];
        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){ ///in은 index순서를 가져옴
            console.log(arr[idx], `배열의 ${idx} 요소`);
        }
	</script>

 

 

답)

 

 

 

 

 

완전 중요한 문제(별 10개, 계속 반복하셈 이해하고, 내가 스스로 만들때까지)

실습. 아래의 배열의 요소에 접근하여 이름만 콘솔에 차례대로 출력 하도록 하시오.
    ex) 손흥민, 황희찬, 이강인, 김승규
	<script type="text/javascript">
		const arr2 = [4, '손흥민', 1, '황희찬', 2, '이강인', '김승규', 3, undefined, null, true];
		//index[1,2,3,4] 의 값만 들고 와야됨
		
		let isFirst = true;
		let namePrint=''
		for(let name of arr2){
			if(typeof name == 'string') {
				if(isFirst){
					namePrint +=name;
					isFirst = false;
				}else {
					namePrint +=`, ${name}`;
				}
			}
		}
		console.log(namePrint);
	</script>

 

 

 

실습3)완전중요!!! 꼭 10번 더 풀어보고 이해하고 넣어가기

    실습. 배열에 담긴 숫자형 값 중 짝수만 찾아 합산하여 그 결괏값만 출력하시오.
    실습. 추출한 짝수만 evenArray 참조변수(배열)에 담으시오

답)

<script type="text/javascript">
		var nArr = [13,15,20,22,35,50,70,99];
		let evenTotal = 0;
		const evenArr = [];
		for(let num of nArr) {
			if(num % 2==0){
				evenTotal += num;
				evenArr.push(num);
			}
		}
		console.log(`짝수의 합: ${evenTotal}`);
		console.log(`짝수배열: ${evenArr}`);
	</script>

 

실습4)완전중요!!! 꼭 10번 더 풀어보고 이해하고 넣어가기

실습4
    실습. 아래의 배열에 학생의 점수가 담겨 있다. 학생들의 평균 점수를 구하시오.
  실습5
    실습. 아래의 배열에 학생의 점수가 담겨 있다. 60점 이상인 학생 수를 구하시오.
 
 
 
답)
<script type="text/javascript">
		var nArr01 = [60, 70, 55, 60, 80, 99];
		const passArr = [];
		let total = 0;
		for(let score of nArr01){
			total +=score;
			if(score >=60) passArr.push(score);
		}
		console.log(`학생들의 평균점수: ${parseInt(total/nArr01.length)}`);
		console.log(`60점이상 학생수: ${passArr.length}명`);
	</script>

 

 

 

실습6

)0~1000까지 홀수인 숫자만 배열에 담으시오. 홀수들의 합산을 구하시오.

 

 

답)

<script type="text/javascript">
		var nArr01 = [];
		let oddTotal1 =0;
		for(let num=0; num<1001; num++){
			if(num %2==1){
				nArr01.push(num);
				oddTotal1 +=num;
			}
		}
		console.log(`홀수배열: ${nArr01}`);
		console.log(`홀수합산: ${oddTotal1}`);
	</script>