2017-10-18 165 views
1

我有一個看起來像這樣的結構中對象的屬性:如何訪問另一個對象

Customer { 
    name: 'jen', 
    options: 
    [ Order { 
     _price: 11, 
     _option: 'vegan', 
     _name: 'V for Vegan', 
     _ingredients: 
     [ Ingredient { name: 'mint', price: 0.5 }, 
      Ingredient { name: 'peanuts', price: 0.5 } ] }, 
    Order { 
     _price: 11, 
     _option: 'vegetarian', 
     _name: 'Veggie', 
     _ingredients: [] } ] } 

我有一個很難註銷該部分:

_ingredients: 
      [ Ingredient { name: 'mint', price: 0.5 }, 
       Ingredient { name: 'peanuts', price: 0.5 } ] }, 

我能到註銷此:

Options: vegan 
[object Object],[object Object] 

Options: vegetarian 

但我想它是像

Options: vegan 
mint, peanuts 

我最後一次嘗試通過_ingredients循環,但它返回undefined。到目前爲止我的代碼:

getBill() { 
     let totalPrice = 0; 

     console.log(` 
     Your current bill: 
     `) 

     this.options.forEach((i) => { 
     console.log(` 
      Option: ${i._option} 
      Extra Ingredients: ${i._ingredients.forEach((j) => {j.name})} 
     `) 
     totalPrice += i._price; 
     }) 

     console.log(` 
     Total Price: ${totalPrice} $ 
     `) 
    } 
+0

有沒有什麼魔力普通的舊JavaScript對象,屬性,如果它是可見的訪問。 – tadman

+0

嗨@tadman但我無法註銷該屬性?它返回'undefined'。 – catch22

+2

'forEach'不返回任何東西。你可以用'陣列#map' –

回答

3

這是一個JavaScript函數誤差forEach實際上並不返回任何有用的東西。如果你讀的文檔,你會看到的返回值被明確指定爲undefined,這就是你可能得到。你需要做些什麼,比如將它們連接在一起。

Extra Ingredients: ${i._ingredients.map(_i => _i.name).join(', ')} 

使用LodashUnderscore會給你一個map函數需要一個字符串,以及:

Extra Ingredients: ${_.map(i._ingredients, 'name').join(', ')} 

實際返回所需的值,它撥弄出name屬性,然後你可以使用join進行美容處理,將其組合成格式良好的字符串列表。

+4

爲什麼不是原生JavaScript地圖? –

+0

@HassanImam好點。我將添加一個版本。 – tadman

+0

帶下劃線的代碼片段返回ReferenceError:_未定義。 與地圖它沒有返回任何錯誤或未定義,但只返回'Extra Ingredients:,'而不是名稱。 – catch22