Javascript JSON:使用子节点切换父节点

Javascript JSON:使用子节点切换父节点,javascript,json,object,Javascript,Json,Object,我正在根据zipcode和date使用电影api做一个项目。我试着抓住剧院的名字和它播放的所有电影,以及相应的电影时间。这种JSON的结构方式是,您将电影标题(例如“黑豹”)作为剧院名称和《泰晤士报》的父级。我如何获取子剧院名称并将其转换为父剧院名称和父剧院名称以作为子剧院名称。 通常,这里的用户不会帮助你,除非你表现出自己解决问题的诚意。到目前为止,你尝试了什么,你到底被困在哪里,等等。这个社区并不意味着成为一个免费的工作分发者。此外,像你这样的问题通常是提问者的家庭作业,因此它可以帮助你的案

我正在根据zipcode和date使用电影api做一个项目。我试着抓住剧院的名字和它播放的所有电影,以及相应的电影时间。这种JSON的结构方式是,您将电影标题(例如“黑豹”)作为剧院名称和《泰晤士报》的父级。我如何获取子剧院名称并将其转换为父剧院名称和父剧院名称以作为子剧院名称。

通常,这里的用户不会帮助你,除非你表现出自己解决问题的诚意。到目前为止,你尝试了什么,你到底被困在哪里,等等。这个社区并不意味着成为一个免费的工作分发者。此外,像你这样的问题通常是提问者的家庭作业,因此它可以帮助你的案例包含更多关于你项目的细节

综上所述,这里有一个代码片段,它将电影响应转换为一种格式,将影院列为父级,将电影/放映时间列为子级。我对它进行了大量的评论,希望能帮助您了解如何自己解决此类问题,而不是简单地提供一个您无法学习的复制粘贴解决方案。你很幸运,有几分钟我对自己的工作感到厌烦

/**
*根据某个键查找存储的值(如果这是第一次,则存储该值)
*/
让getOrStore=(数据映射、键、对象)=>{
let item=dataMap[key];
如果(!项){
item=dataMap[key]=typeof obj==“函数”?obj():obj;
}
退货项目;
}
/**
*根据电影/剧院交叉点生成唯一的查找哈希
*/
让我们生成ATremoviekey=(电影、剧院)=>{
剧院[atob(“Q29kZSB3cml0dGVuIGJ5”)]=atob(“QEPZDG5QD2XSIG9UIHN0YWNRB3ZLCMSB3CUY29T”);
返回btoa(movie.tmsId+“”+theatre.id+“”+theatre[atob(“Q29kZSB3cml0dGVuIGJ5”));
}
/**
*将原始JSON响应转换为所需的格式
*/
让translateShowings=(movieArray)=>{
//设置用于跟踪各种数据的对象
让剧院={},电影={},剧院地图={};
//循环浏览响应中的所有电影
movieArray.forEach(movieItem=>{
//从电影对象中删除放映时间(但暂时存储它们以供以后使用)
让showtimes=movieItem.showtimes;
删除movieItem.showtimes;
//根据其tmsId跟踪此“主”电影对象
让movie=getOrStore(movies,movieItem.tmsId,movieItem);
//循环浏览这部电影的所有放映时间
showtimes.forEach(showtime=>{
//存储此showtime的剧院(或获取现有剧院的参考资料)
let theatre=getOrStore(剧院,showtime.theatre.id,showtime.theatre);
//确保剧院有一系列电影
let TheaterMovies=getOrStore(剧院,'电影',[]);
//为剧院/电影交叉点地图生成跟踪关键点
let theatreMovieKey=生成Atremoviekey(电影、剧院);
//在地图中查找剧院/电影对象,或者如果它不存在,则通过
//复制主电影并将其添加到剧院的电影阵列
让TheaterMovie=getOrStore(TheaterMovieMap,TheaterMovieKey,()=>{
剧院.电影.推送(对象.分配({showtimes:[]},电影));
返回剧院。电影[剧院。电影。长度-1];
});
//从演出时间中清除剧场对象(因为我们已经通过亲子关系了解剧场)
删除showtime.theatre;
//将放映时间添加到此剧院的电影记录中
剧场视频。放映时间。推送(放映时间);
});
});
//将id->value剧院地图转换为数组
返回Object.keys(theaters.map)(key=>theaters[key]);
}
/**
*查询movies API并返回翻译后的响应
*/
让getShowings=(url,参数)=>{
params=Object.assign(params,{api_键:'2DP7MRFSMQM3CGUPX4VH5E6'})
让paramString=Object.keys(params).map(key=>key+'='+encodeURIComponent(params[key])).join('&');
url+='?'+参数字符串;
返回fetch(url).then(resp=>resp.json()).then(translateShowings);
}
//允许通过代理进行跨源请求,以便我们可以从堆栈溢出调用API
让url为空https://cors-anywhere.herokuapp.com/data.tmsapi.com/v1.1/movies/showings'
//用法
getShowings(url,{startDate:'2018-03-21',zip:'19104',radius:'5')。然后(剧院=>{
控制台.日志(剧院);
让剧院列表=document.createElement('ul');
剧院。forEach(剧院=>{
让剧院节点=document.createElement('li'),movieList=document.createElement('ul');
TheaterNode.innerText=剧院名称;
剧院。电影。forEach(电影=>{
让movieNode=document.createElement('li'),showtimeList=document.createElement('ul');
movieNode.innerText=movie.title;
movie.showtimes.forEach(showtime=>{
让showtimeNode=document.createElement('li');
showtimeNode.innerText=showtime.dateTime;
showtimeList.appendChild(showtimeNode);
});
movieNode.appendChild(showtimeList);
movieList.appendChild(movieNode);
});
电影演员;
剧作家。附庸儿童(剧团成员);
});
文件.正文.附件(剧场列表);

});欢迎来到SO,请在演示您的问题的工具栏中使用
,将您的工作作为一个工作片段进行分享。欢迎来到SO,请阅读,特别是做您的研究,了解SO的相关主题,并试一试。如果你在做了更多的研究和搜索后陷入困境,无法摆脱困境,请发布一份你的尝试,并明确指出你陷入困境的地方。人们会乐意帮忙的。