社区首页 >问答首页 >用最小块大小将数组拆分为给定大小的块。

用最小块大小将数组拆分为给定大小的块。
EN

Stack Overflow用户
提问于 2019-09-12 05:45:49
回答 1查看 1.1K关注 0票数 0

有很多将数组分割成块的例子,例如:Split array into chunks,但我也希望保留每个块的最小大小,最后一个块的大小不应该小于预期的最小大小。

假设您有一个包含1001项的数组,您希望将其拆分为100块。最后一块将变成1的大小,在某些情况下它可能不是预期的结果。所以,你也有最小的块大小的预期。可能的方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-12 05:45:49

1.如果最后一个块中的元素小于最小值,则删除它:

代码语言:javascript
代码运行次数:0
复制
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.将最后一个块添加到前一个块:

代码语言:javascript
代码运行次数:0
复制
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.将最后一个块平均地分配到其他块:

代码语言:javascript
代码运行次数:0
复制
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;
};

希望这能有所帮助。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57908133

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档