Бесконечный цикл , с последовательным выводом элементов
посмотрите пожалуйста код, тут выводит по по одному элементу массива, а как сделать чтобы к примеру по 2 элемента выводилось
const arr = [1,2,3,4,5,6,7]
let start = 0
let end = arr.length - 1
const timer = setInterval(() => {
console.log(arr[start])
if(start === end || start > end) {
start = 0;
} else {
start += 1;
}
}, 1000);
return () => clearInterval(timer);
`
Ответы (3 шт):
Автор решения: Student
→ Ссылка
Нашел решение, cначала делаем chunk
const arr:any = [1,2,3,4,5,6,7]
const perChunk = 2
const chunk = arr.reduce((resultArray:any, item:any, index:any) => {
const chunkIndex = Math.floor(index/perChunk)
if(!resultArray[chunkIndex]) {
resultArray[chunkIndex] = []
}
resultArray[chunkIndex].push(item)
return resultArray
}, [])
let start = 0
let end = chunk.length - 1
const timer = setInterval(() => {
console.log(chunk[start])
if(start === end || start > end) {
start = 0;
} else {
start ++;
}
}, 1000);
return () => clearInterval(timer);
Автор решения: Алексей Р
→ Ссылка
function func() {
const arr = [1, 2, 3, 4, 5, 6, 7];
let start = 0;
const timer = setInterval(() => {
let end = (start + 1) % arr.length;
console.log(arr[start]+','+arr[end]);
start = (start + 2) % arr.length;
}, 1000);
//return () => clearInterval(timer);
}
func()
Автор решения: Егор Банин
→ Ссылка
Тоже хочу предложить решение
function f(arr, size, fn, interval) {
let
pos = 0,
timer = setInterval(() => {
let chunk = [];
if (arr.length && size > 0) {
let
end = (pos + size) % arr.length,
mult = Math.floor((pos + size) / arr.length);
chunk = mult ? arr.slice(pos) : arr.slice(pos, end);
while (mult--) {
chunk = chunk.concat(mult ? arr : arr.slice(0, end));
}
pos = end;
}
fn(chunk);
}, interval);
return () => clearInterval(timer);
}
f([1, 2, 3, 4, 5, 6, 7], 2, console.log, 1000);
// f([], 2, console.log, 1000);
// f([1, 2, 3], 0, console.log, 1000);
// f([1, 2, 3], 1, console.log, 1000);
// f([1, 2, 3], 3, console.log, 1000);
// f([1, 2, 3], 4, console.log, 1000);
// f([1, 2, 3], 10, console.log, 1000);
Попробуйте разобраться как работает — это интересно и полезно.