Javascript 在数组的复杂对象中访问深度嵌套的值
我有一个包含嵌套对象和数组的对象,其结构如以下示例所示:Javascript 在数组的复杂对象中访问深度嵌套的值,javascript,arrays,reactjs,Javascript,Arrays,Reactjs,我有一个包含嵌套对象和数组的对象,其结构如以下示例所示: { "5-1980": [ { "memID": "180", "memType": "Movie", "date": { "month": 5, "year": 1980 },
{
"5-1980": [
{
"memID": "180",
"memType": "Movie",
"date": {
"month": 5,
"year": 1980
},
"favourite": null,
"public": null,
"music": [],
"movie": [
{
"poster": "https://image.tmdb.org/t/p/original//7BuH8itoSrLExs2YZSsM01Qk2no.jpg"
}
],
"tvshow": [],
"game": []
},
{
"memID": "180",
"memType": "Movie",
"date": {
"month": 5,
"year": 1980
},
"favourite": null,
"public": null,
"music": [],
"movie": [
{
"poster": "https://image.tmdb.org/t/p/original//7BuH8itoSrLExs2YZSsM01Qk2no.jpg"
}
],
"tvshow": [],
"game": []
}
],
"6-1980": [
{
"memID": "65",
"memType": "Game",
"date": {
"month": 6,
"year": 1980
},
"favourite": null,
"public": null,
"music": [],
"movie": [],
"tvshow": [],
"game": [
{
"boxArt": "https://images.igdb.com/igdb/image/upload/t_1080p/co1hvj.jpg"
}
]
}
],
"7-1980": [
{
"memID": "178",
"memType": "Movie",
"date": {
"month": 7,
"year": 1980
},
"favourite": null,
"public": null,
"music": [],
"movie": [
{
"poster": "https://image.tmdb.org/t/p/original//5xcXvTErivIgRchsaw9qaT3NflE.jpg"
}
],
"tvshow": [],
"game": []
}
]
}
我无法确定如何访问对象中的值,特别是URL,以便使用它们渲染图像。以上面的数据为例,我想访问嵌套在对象中的四个URL,这样我就可以按照以下方式显示分组到数组中的图像:
[
5-1980: [
URL 1,
URL 2
],
6-1980: [
URL 1
],
7-1980: [
URL 1
]
]
目前,我可以使用Object.keys(data).map((data,I)=>
为每个月-年组呈现元素,但我无法确定如何访问每个元素的关联图像URL
由于URL根据memType
嵌套在不同的数组中,我知道我需要构造一些if
语句,但我无法确定如何到达与每个月-年组关联的数组中的每个对象。您可以使用并迭代、返回和展平中间结果在这些值中,指定要从嵌套属性中分解和映射的键
Object.entries(data).flatMap(([key, value]) => [
key,
...value.flatMap(({ game, movie }) => [
...movie.map(({ poster }) => `->${poster}`),
...game.map(({ boxArt }) => `->${boxArt}`),
// spread in any other sub-category arrays with URLs
])
]);
const数据={
"5-1980": [
{
memID:“180”,
memType:“电影”,
日期:{
月份:5,
年份:1980年
},
收藏夹:空,
public:null,
音乐:[],
电影:[
{
海报:
"https://image.tmdb.org/t/p/original//7BuH8itoSrLExs2YZSsM01Qk2no.jpg"
}
],
电视节目:[],
游戏:[]
},
{
memID:“180”,
memType:“电影”,
日期:{
月份:5,
年份:1980年
},
收藏夹:空,
public:null,
音乐:[],
电影:[
{
海报:
"https://image.tmdb.org/t/p/original//7BuH8itoSrLExs2YZSsM01Qk2no.jpg"
}
],
电视节目:[],
游戏:[]
}
],
"6-1980": [
{
memID:“65”,
memType:“游戏”,
日期:{
月份:6,
年份:1980年
},
收藏夹:空,
public:null,
音乐:[],
电影:[],
电视节目:[],
游戏:[
{
boxArt:“https://images.igdb.com/igdb/image/upload/t_1080p/co1hvj.jpg"
}
]
}
],
"7-1980": [
{
memID:“178”,
memType:“电影”,
日期:{
月份:7,
年份:1980年
},
收藏夹:空,
public:null,
音乐:[],
电影:[
{
海报:
"https://image.tmdb.org/t/p/original//5xcXvTErivIgRchsaw9qaT3NflE.jpg"
}
],
电视节目:[],
游戏:[]
}
]
};
const value=Object.entries(data.flatMap)([key,value])=>[
钥匙
…value.flatMap(({game,movie})=>[
…movie.map(({poster})=>`->${poster}`),
…game.map(({boxArt})=>`->${boxArt}`)
])
]);
console.log(值)
非常感谢您花时间来研究这个问题,这是一个非常好的解决方案,特别是它允许我添加其他子类别。但这并不能让我达到我想要的目的-我已经更新了我的问题,使其更加清晰。我想返回一个数组,其中包含每个月-年组的数组,其中包含每个url那一年的那个月。再次感谢你在这方面的帮助!我只是在玩代码,可以通过将flatMap
更改为justmap
,然后更改我的一些其他代码来获得我需要的。再次感谢你的帮助!还有一个问题-是否可以将静态URL添加到其中一个子类别使用这个解决方案,例如,…event==='SOME\u URL'
?@Sean如果我理解你的要求,那么我会这样想:…[…movie.map({poster}=>,'SOME\URL'],
或者…movie.map({poster}=>,${poster}])。concat(['SOME\poster}])
。