【问题标题】:better way to write the for loop编写 for 循环的更好方法
【发布时间】:2016-09-20 14:27:41
【问题描述】:

我想遍历数组并使用“if”语句检查条件。如果满足条件,则它应该退出 for 循环并执行其他语句。执行其他语句后,它应该从下一个变量循环。 例如。如果我有一个名为“歌曲”的数组,

_(songs).forEach(function(song) {
    if (song.genre == 1){
       //do something and exit from for loop 
    }
});
// Do something else

现在我想再次循环并从之前停止的地方开始。我试图实现如下:

var i = 0;
for(;i < songs.length; i++){
            if(songs[i].genre == 3) {
                //do something
                i++;
                break;
            }
            else if(songs[i].genre == 2) {
                //do something
                i++;
                break;
            }else{
                //do something
                i++;
                break;
            }
        }

它服务于目的。但是有没有办法让它变得高效或更好?任何建议都会有所帮助:)

【问题讨论】:

    标签: javascript arrays for-loop foreach


    【解决方案1】:
    function doStuffWithSongs(song) {
      switch (song.genre) {
        case 'pop':
          // handle pop songs
          break;
    
        case 'rock':
          // repeat for every genre
          break;
    
      }
    };
    
    songs.forEach(doStuffWithSongs);
    

    您还可以让doStuffWithSongs 成为一堆不同的函数,并在forEach 中处理switch

    songs.forEach(song => {
      switch (song.genre) {
        case 'pop': return handlePopSongs(song);
        case 'rock': return handleRockSongs(song);
        // etc.
      }
    });
    

    【讨论】:

      【解决方案2】:

      有一些对象来保存功能和歌曲

      var songs = [{
          "genre": "pop",
          "name": "Hit me baby"
        }, {
          "genre": "rock",
          "name": "Smoke on the water"
        }],
        handlers = {
          pop: function(song) {
            console.log("pop", song.name);
          },
          rock: function(song) {
            console.log("rock", song.name);
          }
        }
      for (var i = 0; i < songs.length; i++) {
        handlers[songs[i].genre](songs[i]);
      }

      【讨论】:

        【解决方案3】:

        除非出于某种原因您需要保持秩序?您确实应该在歌曲数组上运行 filter 创建一个“流派”数组,然后您可以简单地循环遍历每个数组,执行您需要执行的任何功能或操作。

        //SONGS ARRAY
        var songs = [
            {
                'name':'Work',
                'genre': 0
            },
            {
                name: 'Blessings',
                genre: 1
            },
            {
                name: 'Blame',
                genre: 0
            },
            {
                name: 'She Got It',
                genre: 0
            },
            {
                name: 'Controlla',
                genre: 1
            },
            {
                name: 'Get Low',
                genre: 1
            }
        ];
        
        //FILTERED GENRE ARRAYS 
        var myRockSongs = songs.filter((o)=>(o.genre === 0) ? true : false);
        var myPopSongs = songs.filter((o)=>(o.genre === 1) ? true : false);
        
        //CONSOLE LOG
        console.log(myRockSongs);
        console.log(myPopSongs);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-03-03
          • 1970-01-01
          • 1970-01-01
          • 2015-08-31
          • 1970-01-01
          • 2022-01-10
          • 1970-01-01
          相关资源
          最近更新 更多