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
更改为just
map
,然后更改我的一些其他代码来获得我需要的。再次感谢你的帮助!还有一个问题-是否可以将静态URL添加到其中一个子类别使用这个解决方案,例如,
…event==='SOME\u URL'
?@Sean如果我理解你的要求,那么我会这样想:
…[…movie.map({poster}=>,'SOME\URL'],
或者
…movie.map({poster}=>,${poster}])。concat(['SOME\poster}])