functionchunk(list, size) {
const out = [];
for (let i = 0; i < list.length; i += size) {
out.push(list.slice(i, i + size));
}
return out;
}
console.log(chunk('abcdef', 2));
出力書き換えて実行できます
Ctrl+Enter でも実行JS · UTF-8
[ 'ab', 'cd', 'ef' ]
Math.ceil() で切り上げるのが要点です。5 / 2 は 2.5 なので、塊は3つ。
どちらでも構いません。for のほうが読み手を選ばないので、迷ったらそちらで。
気をつけること:0 を渡すと止まらない
example.js
functionchunk(list, size) {
const out = [];
for (let i = 0; i < list.length; i += size) {
out.push(list.slice(i, i + size));
}
return out;
}
const rows = [{ id: 1 }, { id: 2 }, { id: 3 }];
const pages = chunk(rows, 2);
pages[0][0].id = 99;
console.log(rows[0].id);
console.log(pages.length, pages.flat().length);
出力書き換えて実行できます
Ctrl+Enter でも実行JS · UTF-8
99
2 3
size に 0 が入ると i が進まず、無限ループになります。
このページでは実行できません。 止まらないコードは実行の枠を使い切ってしまいます。
size が変数から来るなら、先に確かめてください。
javascript
function wrong(list, size) { const out = [];
for (let i = 0; i < list.length; i++) { out.push(list.slice(i, i + size)); }
return out; }
console.log(wrong([1, 2, 3, 4], 2));
[ [ 1, 2 ], [ 2, 3 ], [ 3, 4 ], [ 4 ] ]
example.js
asyncfunctionload(n) {
return n * 10;
}
const ids = [1, 2, 3, 4, 5];
const out = [];
for (let i = 0; i < ids.length; i += 2) {
const part = ids.slice(i, i + 2);
console.log('この回:', part);
out.push(...awaitPromise.all(part.map(load)));
}
console.log(out);