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

JavaScript对象动态数组优化:仅保留单对重复元素需求实现

解决方案:仅统计每个元素最多一对重复项

没问题,咱们直接调整原脚本的逻辑就能实现需求——核心就是每个元素只记录第一次和第二次出现的位置,之后的重复项直接忽略。

修改后的完整代码

console.log(solution([2, 1, 3, 5, 3, 2, 2]))
function solution(inputArray) {
 let arrMap = []
 for (let i = 0; i < inputArray.length; i++) {
  const currentElement = inputArray[i];
  const existingEntry = arrMap.find(s => s.element === currentElement)
  
  if (existingEntry) {
    // 只有当该元素还没标记为重复时,才处理第一次重复的情况
    if (!existingEntry.repeated) {
      existingEntry.repeated = true;
      existingEntry.firstPosition = existingEntry.position;
      existingEntry.lastPosition = i;
      existingEntry.quantity = 2; // 最多一对,数量固定为2
      delete existingEntry['position'];
    }
    // 如果已经标记为重复,直接跳过后续的重复项
  } else {
    arrMap.push({ 
      repeated: false, 
      element: currentElement, 
      position: i, 
      quantity: 1 
    })
  }
 }
 return arrMap
}

关键改动说明

  • 添加重复状态判断:原代码只要找到已存在元素就会持续更新,现在我们加了if (!existingEntry.repeated)的判断——只有元素还没被标记为重复时,才处理第一次重复的逻辑。
  • 固定重复数量为2:既然最多只统计一对重复,那重复元素的quantity直接设为2就好,不用累加。
  • 忽略后续重复项:当元素已经标记为repeated: true后,后续再遇到该元素直接跳过,不会修改任何统计信息。

测试验证

比如输入[2,1,3,5,3,2,2],返回结果会是:

[
  { repeated: true, element: 2, quantity: 2, firstPosition: 0, lastPosition: 5 },
  { repeated: false, element: 1, position: 1, quantity: 1 },
  { repeated: true, element: 3, quantity: 2, firstPosition: 2, lastPosition: 4 },
  { repeated: false, element: 5, position: 3, quantity: 1 }
]

最后一个2因为已经有一对重复记录了,所以完全被忽略,不会影响统计结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 15:32:32