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

如何获取数组中重复元素的索引?及重复元素计数需求说明

解决数组重复元素的索引记录与次数统计问题

看起来你现在的问题是:想要统计数组中与前一个元素重复的元素的数量,同时捕获所有这类重复元素的索引,但当前代码只能保存最后一个重复元素的索引——这是因为你用对象直接赋值覆盖了之前的索引值,而不是用数组来存储所有符合条件的索引。

我分两种常见需求来给你解决方案:

一、统计连续重复的元素(当前元素与前一个相等)

如果你的需求是只关注连续出现的重复项(比如数组里连续的"abc"),可以用下面的代码:

var newArr = ["abc", "abc", "abc", "d", "et", "d", "et", "zzz"];

function calcConsecutiveDuplicates(arr) {
  const result = {};
  
  // 从第二个元素开始遍历,和前一个元素比较
  for (let i = 1; i < arr.length; i++) {
    const currentItem = arr[i];
    const prevItem = arr[i - 1];
    
    if (currentItem === prevItem) {
      // 如果当前元素和前一个重复,更新记录
      if (!result[currentItem]) {
        // 第一次出现连续重复,初始化结构
        result[currentItem] = {
          repeatCount: 1, // 重复次数(和前一个元素相等的次数)
          duplicateIndices: [i] // 所有重复元素的索引
        };
      } else {
        // 已有记录,累加次数和索引
        result[currentItem].repeatCount++;
        result[currentItem].duplicateIndices.push(i);
      }
    }
  }
  
  return result;
}

// 调用函数查看结果
console.log(calcConsecutiveDuplicates(newArr));

运行后输出:

{
  abc: { repeatCount: 2, duplicateIndices: [1, 2] }
}

代码说明:

  • 从索引1开始遍历(因为要和前一个元素对比),避免越界
  • 用对象存储结果,每个键是重复元素,值包含两个属性:repeatCount(连续重复的次数,即有多少次和前一个元素相等),duplicateIndices(所有重复元素的索引)
  • 只有当当前元素和前一个元素完全相等时,才会更新记录,不会统计非连续的重复项

二、统计所有重复元素(无论是否连续)

如果你的需求是统计数组中所有出现超过一次的元素,并记录它们的所有索引和重复次数,可以用这个版本:

var newArr = ["abc", "abc", "abc", "d", "et", "d", "et", "zzz"];

function calcAllDuplicates(arr) {
  const result = {};
  
  // 遍历数组,记录每个元素的出现次数和所有索引
  arr.forEach((item, index) => {
    if (!result[item]) {
      result[item] = {
        totalOccurrences: 1,
        allIndices: [index]
      };
    } else {
      result[item].totalOccurrences++;
      result[item].allIndices.push(index);
    }
  });
  
  // 过滤掉只出现一次的元素,计算重复次数(总次数-1)
  Object.keys(result).forEach(key => {
    if (result[key].totalOccurrences === 1) {
      delete result[key];
    } else {
      result[key].duplicateCount = result[key].totalOccurrences - 1;
    }
  });
  
  return result;
}

// 调用函数查看结果
console.log(calcAllDuplicates(newArr));

运行后输出:

{
  abc: { totalOccurrences: 3, allIndices: [0, 1, 2], duplicateCount: 2 },
  d: { totalOccurrences: 2, allIndices: [3, 5], duplicateCount: 1 },
  et: { totalOccurrences: 2, allIndices: [4, 6], duplicateCount: 1 }
}

代码说明:

  • 先用forEach遍历数组,记录每个元素的总出现次数和所有出现的索引
  • 之后过滤掉只出现一次的元素,计算重复次数(总出现次数减1,因为第一次出现不算重复)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:21:21