2011-10-12 1 views
3

J'ai une liste de chaînes comme si;JS retourner le prochain dans le tableau, cycle sans fin

var mystrings = [ 
    'apple', 
    'banana', 
    'orange' 
] 

Je voudrais une fonction que je puisse appeler à tout moment pour obtenir la chaîne suivante. Et quand la fin de la liste est atteinte, recommencez et récupérez le premier. Je l'utilise pour une liste de classes CSS qui doivent être appliquées dans l'ordre de la liste, mais je ne serai pas en boucle sur cette liste quand elles sont nécessaires.

Je ne peux pas comprendre et il est difficile de google. Des idées?

Répondre

6

Voici une petite fonction amusante:

function enumerator(array) { 
    var index = 0; 
    return function() { 
     return array[index++%array.length] 
    } 

} 

appelé comme ceci:

var next = enumerator(["a", "b"]); 
next(); // a 
next(); // b 
next(); // a 
+0

Dang, bat-moi à ça. C'est la bonne solution. – lawnsea

+0

Les autres solutions sont correctes, mais le style compact est vraiment très beau. :) – freakish

-1

Utilisez une variable d'index externe et l'incrément ou le remettre à 0 à chaque appel

1
// Your array is declared in global scope 
var mystrings = [ 
    'apple', 
    'banana', 
    'orange' 
]; 

// A global index variable... 
var strIndex = 0; 
function getNextString() { 
    // If you reached the end of the array, reset to 0 
    if (strIndex === mystrings.length - 1) { 
     strIndex = 0; 
     return mystrings[strIndex]; 
    } 
    // Otherwise, increment it and return the new value 
    else return mystrings[++strIndex]; 
} 

// Call it as 
var currentString = getNextString(); 
+0

+ 1 Mais il renvoie l'index. Et vous pouvez omettre le 'else'. – pimvdb

+0

@pimvdb Déjà fixé le retour de l'index. –

+0

+1 Je déteste quand les réponses correctes sont descendues – Joe

Questions connexes