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常规非lodashmap
也可以。你到底试了什么?我认为提供lodash
示例会使这个答案过于复杂,您可以使用\u I[“name”]
语法通过常规map
@Walk All good points传递字符串。我首先选择了Lodash版本,因为我在Internet Explorer的暴政下受苦多年,我不习惯使用ES6这样的好东西。对.map
中代码片段的新更正正在起作用。因为这是最简单的,所以我会选择它,但听到Lodash也是一种财富。谢谢!