简体   繁体   English

Javascript ES6数组映射

[英]Javascript es6 array mapping

I need help creating a function that gonna return me 3 elements from an array each time with time interval of 3 seconds. 我需要帮助来创建一个函数,该函数每次以3秒的时间间隔从数组中返回3个元素。 Let say I have an array 假设我有一个数组

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

It should return array like 它应该像返回数组

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

then after 3 seconds it should return array 然后三秒钟后,它应该返回数组

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

And so on also when the arrays gets end repeat the loop again. 以此类推,当数组结束时,再次重复循环。

I tried using chunk where i used slice and filter but that just return me an array of chunks together. 我尝试在使用切片和过滤器的情况下使用块,但这只是将我的块数组一起返回。

Thanks so much 非常感谢

You can do this with a generator: 您可以使用生成器执行此操作:

// 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);

Working fiddle: https://jsfiddle.net/adrice727/msx3sf03/1/ 工作提琴: https : //jsfiddle.net/adrice727/msx3sf03/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)

The jsbin: https://jsbin.com/yoqelu/edit?html,js,console,output jsbin: https ://jsbin.com/yoqelu/edit html,js,控制台,输出

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM