有很多将数组分割成块的例子,例如:Split array into chunks,但我也希望保留每个块的最小大小,最后一个块的大小不应该小于预期的最小大小。
假设您有一个包含1001项的数组,您希望将其拆分为100块。最后一块将变成1的大小,在某些情况下它可能不是预期的结果。所以,你也有最小的块大小的预期。可能的方法是什么?
发布于 2019-09-12 05:45:49
1.如果最后一个块中的元素小于最小值,则删除它:
const chunk = (arr, size, min) => {
const chunks = arr.reduce(
(chunks, el, i) =>
(i % size ? chunks[chunks.length - 1].push(el) : chunks.push([el])) && chunks,
[]
);
const l = chunks.length;
if (chunks[l - 1].length < min) chunks.pop();
return chunks;
};
2.将最后一个块添加到前一个块:
const chunk = (arr, size, min) => {
const chunks = arr.reduce(
(chunks, el, i) =>
(i % size ? chunks[chunks.length - 1].push(el) : chunks.push([el])) && chunks,
[]
);
const l = chunks.length;
if (chunks[l - 1].length < min) chunks[l - 2].push(...chunks.pop());
return chunks;
};
3.将最后一个块平均地分配到其他块:
const chunk = (arr, size, min) => {
const chunks = arr.reduce(
(chunks, el, i) =>
(i % size ? chunks[chunks.length - 1].push(el) : chunks.push([el])) && chunks,
[]
);
const l = chunks.length;
if (chunks[l - 1].length < min) {
const lastChunk = chunks.pop();
let i = 0;
while (lastChunk.length) {
chunks[i % (l - 1)].push(lastChunk.pop());
i += 1;
}
}
return chunks;
};
希望这能有所帮助。
https://stackoverflow.com/questions/57908133
复制相似问题