Задать вопрос
@ArtYarm

Как сделать чтобы каждый промежуток времени возвращало следующий элемент массива?

Есть массив
let colors = ["red", "pink", "coral", "orange", "yellow", "green"];

Нужно создать функцию, которая будет возвращать каждую секунду следующий элемент массива
  • Вопрос задан
  • 313 просмотров
Подписаться 1 Простой 2 комментария
Решения вопроса 4
0xD34F
@0xD34F Куратор тега JavaScript
О каком массиве идёт речь, через какой промежуток надо получать его элементы и что с ними делать:

const options = [
  [ 'hello, world!!', 'fuck the world', 'fuck everything' ],
  500,
  console.log,
];

Можно установить интервал:

function interval(arr, delay, callback) {
  let i = -1;

  return arr.length
    ? setInterval(() => callback(arr[i = -~i % arr.length]), delay)
    : null;
}


const intervalId = interval(...options);
// надо остановить хождение по кругу, делаем так: clearInterval(intervalId);

Или воспользоваться рекурсивными таймаутами:

function interval(arr, delay, callback) {
  let timeoutId = null;

  arr.length && (function step(i) {
    timeoutId = setTimeout(() => {
      callback(arr[i]);
      step((i + 1) % arr.length);
    }, delay);
  })(0);

  return () => clearTimeout(timeoutId);
}


const stop = interval.apply(null, options);
// надо остановить, делаем так: stop();
Ответ написан
Комментировать
coderisimo
@coderisimo Куратор тега JavaScript
let colors = ["red", "pink", "coral", "orange", "yellow", "green"];

let t = setInterval(function () {
  if (!colors.length) clearTimeout(t);
  colors.length && console.log(colors.shift());
}, 1000);


следует понимать, что в данном случае после выдачи всех значений массив будет пуст.
Ответ написан
Комментировать
Stalker_RED
@Stalker_RED
function getColor() {
  return colors[(+ new Date()) % colors.length];
}
Ответ написан
Комментировать
ArsenyMatytsyn
@ArsenyMatytsyn Куратор тега JavaScript
Руководитель frontend направления, предприниматель
Удаляй первый элемент и пуш его в конец массива. Показывай всегда 0-индексный элемент массива и повторяй это каждую секунду)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы