JS возвращает следующий в массиве, цикл бесконечный - PullRequest
3 голосов
/ 12 октября 2011

У меня есть список строк, таких как;

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

Мне нужна функция, которую я могу вызвать в любое время, чтобы получить следующую строку. И когда будет достигнут конец списка, начните сначала и снова получите первый.

Я использую его для списка классов CSS, которые должны применяться в порядке из списка, но я не буду зацикливаться на этом списке, когда они необходимы.

Я не могу понять это, и как-то трудно гуглить. Есть идеи?

Ответы [ 3 ]

6 голосов
/ 12 октября 2011

Вот забавная маленькая функция:

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

}

называется так:

var next = enumerator(["a", "b"]);
next(); // a
next(); // b
next(); // a
1 голос
/ 12 октября 2011
// 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 голосов
/ 12 октября 2011

Используйте внешнюю индексную переменную и увеличивайте или сбрасывайте ее до 0 при каждом вызове

...