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
相关产品推荐
相关产品推荐

