You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何根据属性值对数组分块(单块flagCount总和≤3)

数组分块实现需求

给定如下数组:

const arr = [{flagCount: 3, rank:1}, {flagCount: 3, rank:2}, {flagCount: 1, rank:3}, {flagCount: 1,rank:4}, {flagCount: 1, rank:5}, {flagCount: 2, rank:6},{flagCount: 2, rank:7},{flagCount: 2,rank:8},{flagCount: 1,rank:9}]

需要按照以下规则对数组对象进行分块:

  • 每个分块内所有对象的flagCount总和不超过3
  • 必须保持原数组的rank顺序(即原数组元素的先后顺序)

期望得到的结果数组:

const resultArr = [[{flagCount: 3,rank:1}], [{flagCount: 3,rank:2}], [{flagCount: 1,rank:3}, {flagCount: 1,rank:4}, {flagCount: 1,rank:5}], [{flagCount: 2,rank:6}], [{flagCount: 2,rank:7}], [{flagCount: 2,rank:8}, {flagCount: 1,rank:9}]]

实现思路与代码

通过遍历原数组,维护当前分块和分块的flagCount总和,逐个判断元素是否能加入当前分块即可实现需求:

function chunkByFlagCount(arr) {
  const result = [];
  let currentChunk = [];
  let currentSum = 0;

  for (const item of arr) {
    // 兼容单个元素flagCount超过3的边界情况
    if (item.flagCount > 3) {
      if (currentChunk.length > 0) {
        result.push(currentChunk);
        currentChunk = [];
        currentSum = 0;
      }
      result.push([item]);
      continue;
    }
    // 判断加入当前元素后总和是否符合要求
    if (currentSum + item.flagCount <= 3) {
      currentChunk.push(item);
      currentSum += item.flagCount;
    } else {
      // 当前分块已满,推入结果后新建分块
      result.push(currentChunk);
      currentChunk = [item];
      currentSum = item.flagCount;
    }
  }

  // 处理最后剩余的分块
  if (currentChunk.length > 0) {
    result.push(currentChunk);
  }

  return result;
}

// 测试示例
const arr = [{flagCount: 3, rank:1}, {flagCount: 3, rank:2}, {flagCount: 1, rank:3}, {flagCount: 1,rank:4}, {flagCount: 1, rank:5}, {flagCount: 2, rank:6},{flagCount: 2, rank:7},{flagCount: 2,rank:8},{flagCount: 1,rank:9}];
console.log(chunkByFlagCount(arr));

代码说明

  1. 初始化结果数组、当前分块容器和分块总和计数器。
  2. 遍历原数组每个元素:
    • 若元素自身的flagCount超过3,先处理完当前分块,再将该元素单独作为新分块。
    • 若加入当前元素后分块总和不超过3,则将元素加入当前分块并更新总和。
    • 若总和超出限制,则将当前分块推入结果数组,新建分块放入当前元素并重置总和。
  3. 遍历结束后,将最后剩余的非空分块推入结果数组。

该方案严格保证了分块的顺序与原数组一致,同时满足分块总和的限制条件。

内容的提问来源于stack exchange,提问作者Arup Bhattacharya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 17:10:32