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

按相邻整数属性对对象数组(集合)进行分组的实现方法

按连续递增int属性分组对象数组的解决方案

嘿,刚好处理过类似的需求!既然原数组已经按int属性排好序了,用Array.prototype.reduce()就能轻松实现你要的分组效果,把相邻且int值满足n+1连续递增的对象归为同一组。

完整实现代码

const value = [{int: 1}, {int: 2}, {int: 3}, {int: 15}, {int: 16}, {int: 21}];

const result = value.reduce((acc, current) => {
  // 初始化第一个分组
  if (acc.length === 0) {
    acc.push([current]);
    return acc;
  }
  
  // 获取最后一个分组的最后一个元素
  const lastGroup = acc[acc.length - 1];
  const lastElement = lastGroup[lastGroup.length - 1];
  
  // 判断是否满足连续递增条件
  if (current.int === lastElement.int + 1) {
    lastGroup.push(current);
  } else {
    // 不连续则新建分组
    acc.push([current]);
  }
  
  return acc;
}, []);

console.log(result);
// 输出结果:[[{int:1}, {int:2}, {int:3}], [{int:15}, {int:16}], [{int:21}]]

逻辑拆解

  • 用reduce的累加器acc来存储最终的分组嵌套数组,初始值设为空数组。
  • 遍历每个对象时:
    1. 如果累加器为空,直接把当前对象包装成数组作为第一个分组加入。
    2. 若已有分组,就取最后一个分组的最后一个元素,对比当前对象的int值是否等于上一个元素的int + 1。
    3. 满足连续条件就把当前对象加入最后一个分组;不满足则新建一个分组加入累加器。

简化版写法(ES6+)

如果喜欢更简洁的代码,可以用Array.prototype.at()来快速获取最后一个元素,省去计算索引的步骤:

const result = value.reduce((acc, curr) => {
  const lastGroup = acc.at(-1);
  if (lastGroup && curr.int === lastGroup.at(-1).int + 1) {
    lastGroup.push(curr);
  } else {
    acc.push([curr]);
  }
  return acc;
}, []);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:47:24