您将如何使用Javascript更改值/添加到对象数组中的嵌套对象数据?
以上是我收集的一个样本,以最好地证明我的问题。我很难理解为什么对象数组的嵌套映射(.map())不允许我更改嵌套数据。当我控制台记录结果时,我得到的不是“[undefined,undefined]”就是未更改的“people”数组 我想返回与“people”相同的数组,只是将嵌套的“beers”数组(people.teams.beers[])替换为“beers”数组中相应的对象。下面是成功结果的示例:您将如何使用Javascript更改值/添加到对象数组中的嵌套对象数据?,javascript,arrays,typescript,object,array.prototype.map,Javascript,Arrays,Typescript,Object,Array.prototype.map,以上是我收集的一个样本,以最好地证明我的问题。我很难理解为什么对象数组的嵌套映射(.map())不允许我更改嵌套数据。当我控制台记录结果时,我得到的不是“[undefined,undefined]”就是未更改的“people”数组 我想返回与“people”相同的数组,只是将嵌套的“beers”数组(people.teams.beers[])替换为“beers”数组中相应的对象。下面是成功结果的示例: const beers = [ { id: '100', name: 's
const beers = [
{
id: '100',
name: 'stoneys'
},
{
id: '200',
name: 'budweiser'
},
{
id: '300',
name: 'miller'
},
{
id: '400',
name: 'corona'
}
];
const people = [
{
name: 'steve',
teams: [
{
name: 'pirates',
beers: ['100']
},
{
name: 'penguins',
beers: ['300']
}
]
},
{
name: 'jim',
teams: [
{
name: 'indians',
beers: ['200']
},
{
name: 'blue jackets',
beers: ['100', '400']
}
]
}
];
let newPeople = people.map(fan => {
fan.teams.map(team => {
team.beers.map(beer => beers.filter(brand => brand.id === beer)[0])
});
});
需要一个以单个数组元素为参数并返回映射值的函数。在您的情况下,您没有从映射函数返回任何值,因此会两次未定义
const啤酒=[
{
id:'100',
名字:“斯通尼斯”
},
{
id:'200',
名称:“百威”
},
{
id:'300',
姓名:“米勒”
},
{
id:'400',
名称:“科罗纳”
}
];
康斯特人=[
{
姓名:'史蒂夫',
小组:[
{
名字:'海盗',
啤酒:['100']
},
{
名称:“企鹅”,
啤酒:['300']
}
]
},
{
名字:“吉姆”,
小组:[
{
姓名:'印第安人',
啤酒:['200']
},
{
名称:'蓝色夹克',
啤酒:['100','400']
}
]
}
];
让newPeople=people.map(fan=>{
让团队=fan.teams.map(团队=>{
让beer=team.beers.map(beer=>beers.filter(brand=>brand.id==beer)[0]);
返回{name:team.name,beers:beer}
});
返回{name:fan.name,teams:teams}
});
console.log(newPeople)
您可以发布您尝试过的代码吗?map返回映射结果……您不需要对其执行任何操作it@terrymorse-OP的代码在底部的第一个代码块中这对我来说非常有效!谢谢!现在,有没有办法使返回的对象动态化,这样我就不必单独管理每个返回对象中的键值对object如果我从原始对象数组中添加或删除字段?我尝试使用object.assign(),但是,我无法成功返回正确的对象。您能否打开另一个问题以避免编辑此问题?
{
name: 'steve',
teams: [
{
name: 'pirates',
beers: [
{
id: '100',
name: 'stoneys'
}
]
},
{
name: 'penguins',
beers: [
{
id: '300',
name: 'miller'
}
]
}
]
}