假设我有一个数组,我想一次迭代N.我可以使用一个简单的嵌套循环
const array = ['a','b','c','d','e','f','g','h'];
const step = 3;
for (let i = 0; i < array.length; i += step) {
const end = Math.min(i + step, array.length);
console.log("page:", i / step);
for (let j = i; j < end; ++j) {
const element = array[j];
console.log(" ", element);
}
}
输出:
page: 0
a
b
c
page: 1
d
e
f
page: 2
g
h
但是我想知道是否有一种更现代的方式,因为现在每天都有类似JavaScript的方式。想象:
// pseudo code
const chunkSize = 3
forEachByChunk(array, chunkSize, (subArray, chunkNdx, startingNdxInParentArray) => {
console.log("page:", chunkNdx);
subArray.forEach((element) => { console.log(" ", element); });
});
注意:我可以自己编写forEachByChunk
function forEachByChunk(array, chunkSize, fn) {
const end = array.length;
for (let i = 0; i < end; i += chunkSize) {
fn(array.slice(i, i + chunkSize), i / chunkSize, i);
}
}
我只是想知道在JavaScript中是否还没有一些现代方法可以做到这一点。或者更通用的版本。
答案 0 :(得分:2)
我只是想知道在JavaScript中是否还有一些以现代方式构建的方法。
不,没有。
或者可能是更通用的版本。
有许多用户版本。 Google for&#34; javascript分区数组&#34;。 Here's something让你开始。
答案 1 :(得分:-1)
从lodash查看chunk。它完全符合您的要求。
一般来看看lodash和rambda。他们几乎都有你能想到的一般辅助方法。
mono --version
Mono JIT compiler version 3.2.8 (Debian 3.2.8+dfsg-10)
Copyright (C) 2002-2014 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com
TLS: __thread
SIGSEGV: altstack
Notifications: epoll
Architecture: amd64
Disabled: none
Misc: softdebug
LLVM: supported, not enabled.
GC: sgen
返回_.chunk([1, 2, 3, 4, 5, 6, 7, 8], 3)
编辑: 如果您正在寻找如何使用一些新语法实现这样的事情,那么就是这样做的。
[[1, 2, 3], [4, 5, 6], [7, 8]]
我希望你不要使用它。这没有经过测试,使用lodash可能会好得多。
答案 2 :(得分:-2)
使用切片和贴图可以解决问题
const step = 3;
const array = ['a','b','c','d','e','f','g','h'];
var pages = array.map( (letter,index)=> index%step===0 ? array.slice(index,index+step) : [] )
.filter((page)=>page.length>=0);