2017-11-27 15 views
0

에서 값을 얻을 :자바 스크립트는 중첩 된 객체

var obj = { 
bakery1: { 
    small: { 
     name: "Small cookie", 
     price: 0.75; 
    } 
    large: { 
     name: "Large cookie", 
     price: 3.00; 
    } 
} 
bakery2: { 
    small: { 
     name: "Small cookie", 
     price: 1.00; 
    } 
    large: { 
     name: "Large cookie", 
     price: 4.00; 
    } 
} 
}; 

내가 콘솔에 모든 가격을 인쇄하는 루프를 만드는 방법에 대한 어떻게 갈 것인가?

그리고이 값이 인쇄되면 이름을 추적하는 방법이 있습니까?

예를 들어 출력이 3.00이면 3.00 가격과 함께 제공되는 이름을 제공하는 기능을 어떻게 만들 수 있습니까?

미리 감사드립니다.

답변

2

를 작동하는 방법을 참조하십시오 콜레의 이러한 종류의, 그러나

function printPrice(obj) { 
 
    if (obj.price) 
 
    console.log(obj.name, obj.price) 
 

 
    else for (key in obj) 
 
    printPrice(obj[key]) 
 
} 
 

 
var obj = { 
 
    "bakery1": { 
 
    "small": { 
 
     "name": "Small cookie", 
 
     "price": 0.75 
 
    }, 
 
    "large": { 
 
     "name": "Large cookie", 
 
     "price": 3 
 
    } 
 
    }, 
 
    "bakery2": { 
 
    "small": { 
 
     "name": "Small cookie", 
 
     "price": 1 
 
    }, 
 
    "large": { 
 
     "name": "Large cookie", 
 
     "price": 4 
 
    } 
 
    } 
 
}; 
 

 
printPrice(obj)

을 배열을 사용하는 것이 더 좋을 수도 있습니다. 예를 들어 다음과 같이 할 수 있습니다.

var bakeries = [ 
    { 
    name: 'Bakery 1', 
    menu: [ 
     {name: 'small cookie', price: 0.75}, 
     {name: 'large cookie', price: 3.00} 
    ] 
    }, 

    { 
    name: 'Bakery 2', 
    menu: [ 
     {name: 'small cookie', price: 1.00}, 
     {name: 'large cookie', price: 4.00} 
    ] 
    } 
] 

이렇게하면 각 항목의 특정 속성을보다 잘 구성 할 수 있습니다. 이 경우 가격을 인쇄하는 코드는 훨씬 간단 해집니다.

bakeries 
    .map(bakery => bakery.menu) 
    .forEach(menu => menu.map(
    item => console.log(item.name, item.price))) 
0

실행을하고 귀하의 질문에 대답하기 위해

var obj = { 
 
    bakery1: { 
 
    small: { 
 
     name: "Small cookie", 
 
     price: 0.75 
 
    }, 
 
    large: { 
 
     name: "Large cookie", 
 
     price: 3.00 
 
    } 
 
    }, 
 
    bakery2: { 
 
    small: { 
 
     name: "Small cookie", 
 
     price: 1.00 
 
    }, 
 
    large: { 
 
     name: "Large cookie", 
 
     price: 4.00 
 
    } 
 
    } 
 
}; 
 

 
Object.keys(obj).map((name) => { 
 
    Object.keys(obj[name]).map((type) => document.write(`${name}-${type}-${obj[name][type].name}-${obj[name][type].price}<br/>`)) 
 
})

+0

코드에 대한 설명을 제공 할 수 있습니까? – jhpratt

0

재귀 함수.

function objSearch(serObj){ 
    // For loop through the object. 
    for(prop in serObj){ 
     // If the property is price get the price. 
     if(prop === 'price'){ 
      // Got the price property now return the value of price. 
      console.log('I have price...', prop, '=', serObj[prop]); 
      // If the property is an object send it through the function again. 
     } else if(typeof serObj[prop] === 'object'){ 
      // Pass the nested object. 
      objSearch(serObj[prop]); 
     } 
    } 
} 

objSearch(obj);