Javascript es6数组映射
我需要帮助创建一个函数,每次从数组中返回3个元素,时间间隔为3秒。 假设我有一个数组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'},{
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。太棒了,看起来真的很好。循环怎么样?我只想在第一个元素结束时重新开始。太棒了,看起来真的很好。循环怎么样?我只想在结束时从第一个元素重新开始。