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

如何将数组中相邻相同元素分组?JS代码问题排查

相邻相同元素分组的JavaScript代码修复方案

要将数组[1,1,2,2,2,3,4,4,4]按相邻相同元素分组为[[1,1],[2,2,2],[3],[4,4,4]],你尝试的两段代码分别存在遗漏最后一组、最后一组元素缺失的问题,以下是具体原因和修复方法:

第一段代码问题分析与修复

问题代码

const arr=[1,1,2,2,2,3,4,4,4];
const result=[];
for(let i=0,j=1;j<arr.length;j++){
  if(arr[j-1]!=arr[j]){
    result.push(arr.slice(i,j));
    i=j;
  }
}
document.write(JSON.stringify(result));

问题原因

循环仅在相邻元素不同时执行切片并推入结果,但最后一组元素后面没有不同元素触发这个逻辑,导致循环结束后最后一组被遗漏。

修复代码

const arr=[1,1,2,2,2,3,4,4,4];
const result=[];
let i=0;
for(let j=1;j<arr.length;j++){
  if(arr[j-1]!==arr[j]){
    result.push(arr.slice(i,j));
    i=j;
  }
}
// 循环结束后手动添加最后一组
result.push(arr.slice(i));
document.write(JSON.stringify(result));

修复说明

循环结束后,变量i指向最后一组元素的起始索引,调用arr.slice(i)会从该索引开始取到数组末尾,刚好把最后一组完整推入结果。

第二段代码问题分析与修复

问题代码

const arr=[1,1,2,2,2,3,4,4,4];
const result=[];
for(let i=0,j=1;j<arr.length;j++){
  if(arr[j-1]!=arr[j] || j==arr.length-1){
    result.push(arr.slice(i,j));
      i=j;
  }
}
document.write(JSON.stringify(result));

问题原因

当j等于数组最后一个元素的索引时,arr.slice(i,j)的结束索引不包含j对应的元素,导致最后一组少了最后一个值。

修复代码

const arr=[1,1,2,2,2,3,4,4,4];
const result=[];
for(let i=0,j=1;j<=arr.length;j++){
  if(j === arr.length || arr[j-1]!==arr[j]){
    result.push(arr.slice(i,j));
    i=j;
  }
}
document.write(JSON.stringify(result));

修复说明

将循环条件改为j<=arr.length,当j等于数组长度时触发切片逻辑,此时arr.slice(i,j)会从i取到数组末尾(因为slice的结束索引等于数组长度时,会取到最后一个元素),同时保留相邻元素不同时的切片逻辑,所有分组都能正确生成。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 15:42:37