Возвращаем слово из массива в цикле - PullRequest
0 голосов
/ 09 июля 2019

У меня есть следующий скрипт для получения слова из массива (всего, некоторых или одного) случайным образом , каждые 150 мс. Теперь я хотел бы получить слово из массива не случайно, а в цикле (таким образом, в порядке «все», «некоторые», «один», «все», «некоторые»). «один» и т. д.). Как мне это сделать?

var array = ['all', 'some', 'one'],
  words = null;
var getWord = function() {
  return [array[Math.floor(Math.random() * array.length)]];
};
setInterval(function() {
  words = getWord();
  $('#random-word').html(words[0]);
}, 150);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p id="random-word"></p>

Ответы [ 3 ]

6 голосов
/ 09 июля 2019

Просто укажите постоянную переменную-счетчик, которую вы увеличиваете при каждом вызове getWord:

const array = ['all', 'some', 'one']
let counter = 0;
const getWord = () => array[counter++ % array.length];

setInterval(() => {
  $('#random-word').html(getWord());
}, 500);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="random-word"></div>

Или, если вам не нравится ++ в контексте выражения:

const array = ['all', 'some', 'one']
let counter = 0;
const getWord = () => {
  const word = array[counter % 3];
  counter++;
  return word;
};

setInterval(() => {
  $('#random-word').html(getWord());
}, 500);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="random-word"></div>
0 голосов
/ 09 июля 2019

Другой способ - создать собственный итератор, который будет возвращать следующий индекс массива в пределах допустимого диапазона для каждого целого числа:

var array = ['all', 'some', 'one'],
    words = null;

var iterator = (function* (min, max) {
    let pointer = min;
    while (true) {
        if (pointer > max) {
            pointer = 0
        }
        yield pointer;
        pointer++
    }
})(0, array.length - 1);

var getWord = function () {
    return [array[iterator.next().value]];
};
setInterval(function () {
    words = getWord();
    $('#random-word').html(words[0]);
}, 500);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="random-word"></div>
0 голосов
/ 09 июля 2019

Вы можете использовать counter и сбрасывать его каждый раз, когда он становится больше длины массива

var array = ['all', 'some', 'one'];
words = null;
var i = 0;
var getWord = function() {

  if (i == array.length)
    i = 0;
  return [array[i++]];
};
setInterval(function() {
  words = getWord();
  console.log(words[0]);
}, 150);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...