繁体   English   中英

编写for循环的更好方法

[英]better way to write the for loop

我想遍历数组并使用'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;
            }
        }

它达到目的。 但是无论如何,它有效率或更好? 任何建议都会有所帮助:)

function doStuffWithSongs(song) {
  switch (song.genre) {
    case 'pop':
      // handle pop songs
      break;

    case 'rock':
      // repeat for every genre
      break;

  }
};

songs.forEach(doStuffWithSongs);

您还可以将doStuffWithSongs用作一堆不同的函数,并处理forEachswitch

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

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

 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]); } 

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

//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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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