강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của zxzimin7414
zxzimin7414

câu hỏi đã được viết

JavaScript Trung và Cao cấp: Cốt lõi của Engine

1. Hàm đệ quy, ngăn chặn liên kết thuộc tính, dạng hàm đệ quy, [thời gian dọn dẹp]

정리시간 입니다.

Viết

·

223

0

var book = {
member: {name: 100},
point: {value: 200}
};
function show(param){
for (var type in param){
typeof param[type] === "object" ? show(param[type]) : console.log(type + ":", param[type]);}
};
show(book);
// name: 100
// value: 200
```

1. show(book);
- 마지막 줄에서 show(book)를 호출하면서
- book 오브젝트를 파라미터 값으로 넘겨줍니다.
2. for (var type in param){...}
- for-in으로 파라미터로 받은 오브젝트 전개
3. typeof paam\[type] === "object" ? show(param\[type]) : console.log(type + ":", param\[type]);
4. param\[type] 타입이 "object" 이면
- show()를 호출
- 자신을 호출하면서 param\[type]을 넘겨줍니다.
- book\["member"]이므로 {name: 100}이 넘어 갑니다.
5. param\[type] 타입이 "object"가 아니면
- member: {name: 100}에서 {name: 100}을 읽은 것이므로 값을 출력합니다.

---

### \[정리시간\]

```javascript
debugger;

// 주어진 데이터
var member = {
Jan: {item: {title: "JS", amount: 100}, point: [10, 20, 30]},
Feb: {item: {title: "JS", amount: 200}, point: [40, 50, 60]}
};

// 배열이면 누적되는 값이 저장되는 변수 선언
// 계산을 해야하므로 단순히 선언만 하는 것이 아니라 초깃값으로 0을 할당해줬음
var result = 0;

// 배열의 엘리먼트를 더해 누적하게 만드는 reduce의 콜백 함수
function callback(prev, curr){
return prev + curr;
};

// 메인 함수 선언
function show(param){
// 파라미터로 오는 데이터가 오브젝트 형태여서 for-in문 활용
for (var type in param) {
// Array이면
if (Array.isArray(param[type]) === true){
// 배열의 값을 출력하고
console.log(param[type]);
// result에 배열의 값들을 누적합니다.
result += param[type].reduce(callback);
// 배열이 아닌 object이면
} else if (typeof param[type] === 'object') {
// 프로퍼티 이름과 값을 출력하고
console.log(type,":",param[type]);
// 재귀 호출을 통해 데이터를 끝까지 탐색
show(param[type]);
// 가장 안에있는 오브젝트의 프로퍼티 이름과 값을 출력
} else {
console.log(type,":",param[type]);
}
};
};

// 재귀 함수 호출
show(member);
// 누적한 값 출력
console.log(result);
javascript

Câu trả lời

Câu hỏi này đang chờ câu trả lời
Hãy là người đầu tiên trả lời!
Hình ảnh hồ sơ của zxzimin7414
zxzimin7414

câu hỏi đã được viết

Đặt câu hỏi