我想遍历数组并使用'如果'检查条件。声明。如果满足条件,则应退出for循环并执行其他语句。在执行其他语句之后,它应该从下一个变量循环。 对于前如果我有一个名为' songs',
的数组_(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;
}
}
它有助于达到目的。但无论如何要使其效率更高或更好?任何建议都会有所帮助:)
答案 0 :(得分:0)
function doStuffWithSongs(song) {
switch (song.genre) {
case 'pop':
// handle pop songs
break;
case 'rock':
// repeat for every genre
break;
}
};
songs.forEach(doStuffWithSongs);
您还可以让doStuffWithSongs
成为一系列不同的函数并处理switch
中的forEach
:
songs.forEach(song => {
switch (song.genre) {
case 'pop': return handlePopSongs(song);
case 'rock': return handleRockSongs(song);
// etc.
}
});
答案 1 :(得分:0)
有一些对象来保存功能和歌曲
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]);
}
&#13;
答案 2 :(得分:0)
除非出于某种原因需要保留订单?你真的应该在songs数组上运行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);