[英]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
用作一堆不同的函数,并处理forEach
的switch
:
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.