繁体   English   中英

javascript对象的迭代

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM