2016-09-20 5 views
0

Я хочу провести цикл через массив и проверить условие, используя оператор «if». Если условие выполнено, оно должно выйти из цикла for и выполнить другие операторы. после выполнения других операторов, он должен зацикливаться на следующей переменной. для ex. если у меня есть массив с именем «песни»,лучший способ написать цикл 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; 
      } 
     } 

Это служит цели. но есть ли способ сделать его эффективным или лучше? Любое предложение было бы полезно :)

ответ

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

0

Если по какой-либо причине вам не нужно поддерживать порядок? Вы действительно должны запустить 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); 
Смежные вопросы