본문 바로가기

웹 프로그래밍/JavaScript

[JS] 객체 배열에서 객체를 꺼내는 for 반복문 VS 객체 내의 요소를 꺼내는 for 반복문

객체 배열에서 객체를 꺼내는 for 반복문

(in 배열) 경우에는 인덱스가 나오기 때문에 주의합시다!

  

	for(let i in persons){ // i는 index입니다! 주의하세요.
		// alert(i); 
		persons[i].info();
	}

 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script>
	var person = {
		'name' 	: '홍길동',
		'phone' : '010-1111-2222',
		'name' 	: '홍길동',
		'phone' : '010-1111-2222'
	}
	
	var person2 = {
		'name' 	: '윤길동',
		'phone' : '010-3333-4444',
		'addr'  : '서울시 서초구'	 
	}
	
	var persons = [person, person2];
	
	
	for(let index in persons) {
		let p = persons[index]
		for(let key in p){
			//document.write(`name : ${ p.name }, phone : ${ p.phone }<br>`)
			document.write(`${key} : ${p[key]} <br>`)
		}
	}

	////////////////////////////////////////////////////
	// persons는 배열이다. 배열의 요소가 객체다 : {}, {}
	var persons = [{
		'name' 	: '홍길동',
		'phone' : '010-1111-2222'
		
	}, {
		'name' 	: '윤길동',
		'phone' : '010-3333-4444',
		'addr'  : '서울시 서초구'	 
	}]
	
	alert(typeof persons); // 왜 타입이 object로 뜰까?
	
	// 배열은 스택 명령어와 동일하다. push, pop으로 추가 제거한다.
	// 배열에 객체를 하나 추가한다.
	persons.push({ 
		
		'name' 	: '임길동',
		'phone' : '010-6666-7777'
		
	})
	
	/* 이렇게 내용부를 쓸 필요가 없지. stack은 가장 마지막에 들어온 것이 무조건 먼저 삭제될테니까!!
	
	persons.pop({ 
		
		'name' 	: '임길동',
		'phone' : '010-6666-7777'
		
	});
	*/
	
	persons.pop();
	
	for(let index in persons) {
		let p = persons[index]
		for(let key in p){
			//document.write(`name : ${ p.name }, phone : ${ p.phone }<br>`)
			document.write(`${key} : ${p[key]} <br>`)
		}
	}
	
	for(var i = 1; i <= 2; i++){
		var one = 10;
		let two = 20;
		const three = 30;
		alert(one);
		
	}
	
	alert('one 나올까요 <br>')
	alert(one); // 나옵니다. 호이스팅 되기 때문입니다. 즉, 지역변수로 선언해도 전역변수로 쓰일 수 있지요.
	alert('two 나올까요 <br>')
	alert(two); // 안나옵니다.
	alert('three 나올까요 <br>')
	alert(three); // 안나옵니다.
	
	
/* 	var one = 10;
	var one = 20;
	
	let two = 10;
	two = 20;
	let two = 30;
	
	const three = 10;
	three = 20; */
	
	
	
</script>
</head>
<body>

</body>
</html>

 


 

객체 내의 요소를 꺼내는 for 반복문

key가 '속성명' 형태로 나온다.

따라서 객체명.속성명 형태를 사용할 수 없고, 객체명['속성명'] 형태로 활용해야한다.

		for(let key in p){
			alert(`${key} : ${p[key]} <br>`)
		}

진짜 객체명.속성명 형태로 못써?

네 못씁니다.

	alert("시작됩니다========");
	for(let index in persons) {
		let p = persons[index]
		for(let key in p){
			
			alert("p.속성명 형태 가능한가");
			alert(`${key} : ${ p.key } <br>`);
			//document.write(`name : ${ p.name }, phone : ${ p.phone }<br>`);
			alert("p[속성명] 형태 가능한가");
			alert(`${key} : ${p[key]} <br>`);
			//document.write(`${key} : ${p[key]} <br>`);
		}
	}

 

 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script>
	function makePerson(name, phone, addr) {
		var p = {
			'name' : name, // 콜론왼쪽에 있으면 속성명으로 인식하기때문에, 인자와 이름이 같더라도 똑똑하게 받아들인다.
			phone : phone,
			addr : addr,
			info : function() {
				var msg = ''; //호이스팅이 일어나기때문에, 함수가 끝난 후에도 document.write(msg) 처럼 사용 가능.
				for(let key in this){
					if(key != 'info')
						msg += key + ' : ' + this[key] + '<br>';
				}
				document.write(msg);
			}
		}
		return p;
	}
	
	// var person = makePerson('홍길동', '010-1111-2222', '경기도 광명시');
	let persons = [];
	persons.push(makePerson('홍길동', '010-1111-2222' , '경기도 광명시'))
	persons.push(makePerson('강홍길동', '010-2222-3333' , '서울시 서초구'))
	
	for(let i in persons){ // i는 index입니다! 주의하세요.
		// alert(i); 
		persons[i].info();
	}
	
	
</script>
</head>
<body>

</body>
</html>