2017-11-27 18 views
0

から値を取得する:JavaScriptは、ネストされたオブジェクト

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); 
関連する問題