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

如何识别连续带标记ID并删除每3个连续标记中的中间ID

实现方案

逻辑说明

原有判断连续ID的逻辑可完全保留,仅需调整排序规则为升序(匹配IDList的排列顺序便于连续处理),再新增连续ID加工逻辑即可。核心加工规则:将连续ID每3个分为一组,每组删除中间的1个,剩余元素继续按该规则向后分组处理。

完整实现代码

// 原有筛选共有ID逻辑保持不变
let eqObj = {};
for (var i = 0; i < IDLISTPRD.length; i++) {
    if (IDList.includes(IDLISTPRD[i])) {
        eqObj[IDLISTPRD[i]] = IDList.indexOf(IDLISTPRD[i]);
    }
}

// 排序调整为升序,和IDList的顺序保持一致
let objSorted = Object.entries(eqObj).sort(function (a, b) {
    return a[1] - b[1];
});

// 原有判断是否存在3个连续ID的逻辑保持不变,仅调整差值计算顺序适配升序排列
let flagInRow = 0;
let flagInRowIndicator = true;
for (var i = 0; i < objSorted.length - 1; i++) {
    if (objSorted[i + 1][1] - objSorted[i][1] == 1) {
        flagInRow++;
    } else {
        flagInRow = 0;
    }
    if (flagInRow >= 2) {
        flagInRowIndicator = false;
        break;
    }
}

// 新增:按规则加工连续ID的逻辑
let processedIds = [];
let currentContinuousCount = 0;
for (let i = 0; i < objSorted.length; i++) {
    // 判断当前ID和上一个ID是否连续
    const isContinuous = i > 0 ? (objSorted[i][1] - objSorted[i-1][1] === 1) : false;
    if (isContinuous) {
        currentContinuousCount++;
    } else {
        // 不连续则重置计数器,开启新的连续段计数
        currentContinuousCount = 0;
    }
    // 连续计数为1时对应3个连续ID的中间位,跳过该元素
    if (currentContinuousCount !== 1) {
        processedIds.push(objSorted[i][0]);
        // 处理完一组3个连续ID后,重置计数器适配下一组的计数
        if (currentContinuousCount === 2) {
            currentContinuousCount = -1;
        }
    }
}
// processedIds即为最终处理后的ID数组
console.log(processedIds);

效果验证

  • 输入3个连续ID:["01","02","03"] → 输出 ["01","03"],符合预期
  • 输入6个连续ID:["01","02","03","04","05","06"] → 输出 ["01","03","04","06"],符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 14:15:08