Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript es6数组映射_Javascript_Arrays_Web_Ecmascript 6 - Fatal编程技术网

Javascript es6数组映射

Javascript es6数组映射,javascript,arrays,web,ecmascript-6,Javascript,Arrays,Web,Ecmascript 6,我需要帮助创建一个函数,每次从数组中返回3个元素,时间间隔为3秒。 假设我有一个数组 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'},{

我需要帮助创建一个函数,每次从数组中返回3个元素,时间间隔为3秒。 假设我有一个数组

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'}]
以此类推,当数组结束时,再次重复循环

我尝试在使用slice和filter的地方使用chunk,但这只会返回一个chunk数组

非常感谢

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:


jsbin:

您可以使用生成器执行此操作:

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

工作小提琴:

您可以使用发电机来完成此操作:

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

工作小提琴:

你试过什么?哪里出错了?一个函数不能在不同的时间返回多个内容。你到底在找什么?您想使用回调吗?您尝试了什么?哪里出错了?一个函数不能在不同的时间返回多个内容。你到底在找什么?是否要使用回调?在我看来,
i*3
以几何方式递增,但
i+=3
以线性方式递增。这是对数组结尾的检查,在这种情况下计数器将重置。我在答案中添加了一个jsbin。在我看来,
I*3
以几何方式递增,但
I+=3
以线性方式递增。这是对数组结尾的检查,在这种情况下计数器被重置。我在答案中添加了一个jsbin。太棒了,看起来真的很好。循环怎么样?我只想在第一个元素结束时重新开始。太棒了,看起来真的很好。循环怎么样?我只想在结束时从第一个元素重新开始。