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

JS查找数组重复元素并按增量规则动态自动重命名的实现方法

数组重复元素自动增量重命名实现方案

正确实现代码

const renameDuplicateItems = (originalArr) => {
  // 记录每个元素的出现次数
  const itemCounter = {}
  const resultArr = []

  for (const item of originalArr) {
    if (!itemCounter[item]) {
      // 首次出现直接添加
      resultArr.push(item)
      itemCounter[item] = 1
    } else {
      // 重复出现拼接后缀
      resultArr.push(`${item} ${itemCounter[item]}`)
      // 计数自增,下次重复后缀+1
      itemCounter[item]++
    }
  }
  return resultArr
}

// 测试用例
const _temparr = ["car","motor","bicycle","tricyle","motor"]
console.log(renameDuplicateItems(_temparr))
// 输出结果:["car","motor","bicycle","tricyle","motor 1"]

方案说明

  • 时间复杂度为O(n),仅需遍历一次数组即可完成处理,性能远高于双重循环方案
  • 无需手动指定任何元素值,所有重复元素都会自动按照规则重命名,适配任意场景
  • 每个元素独立计数,多个不同元素重复时不会互相干扰,比如输入["car","motor","car","motor","car"]会输出["car","motor","car 1","motor 1","car 2"]

原代码问题说明

  1. 全局共用一个counter变量,没有按元素区分计数,多个不同元素重复时计数会完全混乱
  2. 判断条件硬编码为等于"motor",无法适配其他重复元素,且取_newarr[i]时i是原数组的遍历索引,此时_newarr长度小于等于i,取值为undefined,判断永远不会触发
  3. 内层循环判断后就push元素,循环结束后又额外push一次原元素,会导致元素重复插入

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 14:27:05