Javascript 如何访问另一个对象内的对象属性

Javascript 如何访问另一个对象内的对象属性,javascript,node.js,Javascript,Node.js,我有这样一个结构: Customer { name: 'jen', options: [ Order { _price: 11, _option: 'vegan', _name: 'V for Vegan', _ingredients: [ Ingredient { name: 'mint', price: 0.5 }, Ingredient { name: 'peanuts', price

我有这样一个结构:

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
我上一次尝试是循环使用_配料,但返回未定义。到目前为止,我的代码是:

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} $
        `)
    }

这是一个JavaScript函数错误,实际上不会返回任何有用的内容。如果阅读文档,您将看到返回值被明确指定为
未定义
,这可能就是您得到的结果。你需要做点什么,比如把他们连在一起

Extra Ingredients: ${i._ingredients.map(_i => _i.name).join(', ')}
使用或将为您提供一个
map
函数,该函数还包含一个字符串:

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

这实际上返回了您想要的值,它提取了
name
属性,然后您可以使用
join
对该属性进行修饰,将其组合成一个格式良好的字符串列表。

简单的老JavaScript对象并没有什么神奇之处,如果该属性可见,则可以访问它。嗨@tadman,但我无法注销该属性?它返回
undefined
forEach
不返回任何内容。您可以尝试使用
array#map
@catch22发布原始json对象吗?我很难看出这个问题。什么是
this.options
?@hassaniam是正确的,当你在做
forEach((j)=>{j.name}}
时,你记录的是
forEach
返回的内容,而不是它内部正在做的事情。它总是返回
未定义的
。为什么不使用本机javascript映射?带下划线的代码段返回
引用错误:\未定义
。对于map,它不会返回任何错误或未定义,只返回
额外成分:,
,而不返回名称。@catch22常规非lodash
map
也可以。你到底试了什么?我认为提供
lodash
示例会使这个答案过于复杂,您可以使用
\u I[“name”]
语法通过常规
map
@Walk All good points传递字符串。我首先选择了Lodash版本,因为我在Internet Explorer的暴政下受苦多年,我不习惯使用ES6这样的好东西。对
.map
中代码片段的新更正正在起作用。因为这是最简单的,所以我会选择它,但听到Lodash也是一种财富。谢谢!