2017-06-08 141 views
0

我需要幫助創建一個函數,每次以3秒的時間間隔返回數組中的3個元素。 讓說,我有一個數組Javascript es6數組映射

const Array = [{name:'A'},{name:'B'},{name:'C'},{name:'D'},{name:'E'},{name:'F'},{name:'G'},{name:'H'},{name:'I'}]; 

它應該返回數組一樣

[{name:'A'},{name:'B'},{name:'C'}] 

然後在3秒後,它應該返回數組

[{name:'D'},{name:'E'},{name:'F'}] 

等也當陣列變得結束再次重複循環。

我試過使用大塊在哪裏我使用切片和過濾器,但只是返回一個大塊數組在一起。

非常感謝

+0

你嘗試過什麼?它出了什麼問題? – RobG

+0

函數不能在不同時間返回多個事物。你到底在找什麼?你想使用回調? – Bergi

回答

2

你可以用一臺發電機做到這一點:

// Takes an array and the of the slice/subarray 
function* subArray(array, size) { 
    let i = 0; 
    let remaining = true; 
    while (remaining) { 
    yield array.slice(i, i + size); 
    i += size; 
    if (i >= array.length) { 
     remaining = false; 
    } 
    } 
} 

// Takes an array, a subarray size, and an interval in seconds 
const getSubArraysAtInterval = (array, size, seconds) => { 
    const iter = subArray(array, size); 
    const interval = setInterval(() => { 
    const next = iter.next(); 
    if (next.done) { 
     clearInterval(interval); 
     console.log('No values remaining'); 
    } else { 
     console.log(next.value); 
    } 
    }, seconds * 1000) 
} 

getSubArraysAtInterval([1, 2, 3, 4, 5, 6], 3, 3); 

工作小提琴:https://jsfiddle.net/adrice727/msx3sf03/1/

+0

太棒了,看起來非常好。循環如何?我只想在結束時從第一個元素開始重新開始。 –

+0

@MuhammadAhsan查看https://jsfiddle.net/adrice727/Ly3yra8n/ – adrice727

1
const array = [{name:'A'},{name:'B'},{name:'C'},{name:'D'},{name:'E'}, 
{name:'F'},{name:'G'},{name:'H'},{name:'I'}]; 

let i = 0 
setInterval(() => { 
    console.log(array.slice(i,i+3)) 
    i*3 > array.length ? i=0 : i += 3 
}, 3000) 

的jsbin:https://jsbin.com/yoqelu/edit?html,js,console,output

+0

在我看來,'i * 3'幾何增加,但'i + = 3'呈線性增加。 – RobG

+0

這是檢查數組的末尾,在這種情況下計數器被重置。我添加了一個jsbin的答案。 –