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

如何按连续等值元素过滤数组并生成带计数的分组结果?

实现连续等值数组元素分组统计的方法

刚好做过类似的需求,给你分享两种靠谱的实现方法,都是JavaScript里常用的思路👇

方法一:使用reduce方法(简洁高效)

reduce是处理数组聚合类需求的利器,这里我们可以用它来逐个迭代元素,动态维护结果数组:

let array = ['yay', 'yay', 'yay', 'opps', 'yay', 'yay', 'opps', 'opps', 'opps'];
let filterArray = array.reduce((acc, current) => {
  // 取出结果数组的最后一组元素
  const lastGroup = acc[acc.length - 1];
  // 如果最后一组存在,且元素和当前元素相同,就把计数加1
  if (lastGroup && lastGroup[0] === current) {
    lastGroup[1]++;
  } else {
    // 否则就新增一组,初始计数为1
    acc.push([current, 1]);
  }
  return acc;
}, []);

console.log(filterArray); // 输出:[['yay', 3], ['opps', 1], ['yay', 2], ['opps', 3]]

逻辑很清晰:初始化一个空数组作为累加器,每遍历一个元素就检查结果数组的最后一组是不是同一个值,是的话就增加计数,不同就新建一组。

方法二:使用普通for循环(直观易懂)

如果你更习惯用基础循环,这种写法逻辑直白,新手也能快速看懂:

let array = ['yay', 'yay', 'yay', 'opps', 'yay', 'yay', 'opps', 'opps', 'opps'];
let filterArray = [];
let currentCount = 1;

for (let i = 0; i < array.length; i++) {
  // 只要当前元素和下一个元素相同,就累加计数
  if (i < array.length - 1 && array[i] === array[i + 1]) {
    currentCount++;
  } else {
    // 遇到不同元素或者数组末尾,就把当前元素和计数存入结果
    filterArray.push([array[i], currentCount]);
    currentCount = 1; // 重置计数,准备统计下一组
  }
}

console.log(filterArray); // 同样得到目标结果

这种方法就是通过遍历数组,逐个比较当前元素和下一个元素,连续相同就累加,直到遇到不同元素时把统计结果存入数组,再重置计数。

两种方法都能完美实现你的需求,选哪种全看个人习惯~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:38:31