[英]Iteration over javascript objects
编写一个函数,将季节编号和剧集编号作为输入,并提供有关该特定剧集的所有信息作为输出
在将用户的输入作为季节编号和剧集编号后,它不会提供输出作为该特定剧集的信息
let BigBang = {
"_embedded": {
"episodes": [
{
"id": 2913,
"name": "Pilot",
"season": 1,
"number": 1,
"airdate": "2007-09-24",
"airtime": "20:30",
"airstamp": "2007-09-25T00:30:00+00:00",
"runtime": 30,
"_links": {
"self": {
"href": "http:\/\/api.tvmaze.com\/episodes\/2913"
}
}
},
{
"id": 2914,
"name": "The Big Bran Hypothesis",
"season": 1,
"number": 2,
"airdate": "2007-10-01",
"airtime": "20:30",
"airstamp": "2007-10-02T00:30:00+00:00",
"runtime": 30,
"image": {
"medium": "http:\/\/static.tvmaze.com\/uploads\/images\/medium_landscape\/4\/12369.jpg",
"original": "http:\/\/static.tvmaze.com\/uploads\/images\/original_untouched\/4\/12369.jpg"
},
}
let season = prompt('Enter Season number');
let number = prompt('Enter Episode number');
let AllInfo = (season,number) => {
for(let current in BigBang._embedded.episodes) {
if(BigBang._embedded.episodes[current].season === season) {
if(BigBang._embedded.episodes[current].number === number) {
let Detail = BigBang._embedded.episodes[current];
alert(Detail);
}
}
}
AllInfo(season,number);
}
尝试改用.find
,它将使代码更.find
:
let BigBang = { "_embedded": { "episodes": [{ "id": 2913, "name": "Pilot", "season": 1, "number": 1, "airdate": "2007-09-24", "airtime": "20:30", "airstamp": "2007-09-25T00:30:00+00:00", "runtime": 30, "_links": { "self": { "href": "http:\\/\\/api.tvmaze.com\\/episodes\\/2913" } } }, { "id": 2914, "name": "The Big Bran Hypothesis", "season": 1, "number": 2, "airdate": "2007-10-01", "airtime": "20:30", "airstamp": "2007-10-02T00:30:00+00:00", "runtime": 30, "image": { "medium": "http:\\/\\/static.tvmaze.com\\/uploads\\/images\\/medium_landscape\\/4\\/12369.jpg", "original": "http:\\/\\/static.tvmaze.com\\/uploads\\/images\\/original_untouched\\/4\\/12369.jpg" }, } ] } } //const inputSeason = prompt('Enter Season number'); const inputSeason = 1; //const inputNumber = prompt('Enter Episode number'); const inputNumber = 2; const foundEpisode = BigBang._embedded.episodes.find(({ season, number}) => { return season === inputSeason && number === inputNumber; }); if (foundEpisode) console.log(foundEpisode); else console.log('No matching season/number found!');
使用数组上的find()方法,您可以更轻松地做到这一点。
let episode = BigBang._embedded.episodes.find((e) => {
return e.season === season && e.number === number;
});
if (episode) {
alert(episode.name);
}
我已经调试了代码,看到您在AllInfo中调用AllInfo函数, 因此在代码中发生了递归调用。 因此,从AllInfo函数中删除对AllInfo的调用,您的问题将得到解决。 请尝试以下代码。
let BigBang = {
"_embedded": {
"episodes": [
{
"id": 2913,
"name": "Pilot",
"season": 1,
"number": 1,
"airdate": "2007-09-24",
"airtime": "20:30",
"airstamp": "2007-09-25T00:30:00+00:00",
"runtime": 30,
"_links": {
"self": {
"href": "http:\/\/api.tvmaze.com\/episodes\/2913"
}
}
},
{
"id": 2914,
"name": "The Big Bran Hypothesis",
"season": 1,
"number": 2,
"airdate": "2007-10-01",
"airtime": "20:30",
"airstamp": "2007-10-02T00:30:00+00:00",
"runtime": 30,
"image": {
"medium": "http:\/\/static.tvmaze.com\/uploads\/images\/medium_landscape\/4\/12369.jpg",
"original": "http:\/\/static.tvmaze.com\/uploads\/images\/original_untouched\/4\/12369.jpg"
},
}]}};
let season = 1;
let number = 2;
let AllInfo = (season,number) => {
for(let current in BigBang._embedded.episodes) {
if(BigBang._embedded.episodes[current].season === season) {
if(BigBang._embedded.episodes[current].number === number) {
let Detail = BigBang._embedded.episodes[current];
alert(JSON.stringify(Detail,null,4));
}
}
}
}
AllInfo(season,number);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.