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

JavaScript数组邻近值与中间值提取代码错误排查求助

问题排查与修复

现有代码的核心问题

  1. 未实现「中间值(In Between)」逻辑:预期输出中的1、3、33都来自排序后数组相邻元素的中间数(如0和2之间的1,2和4之间的3,32和34之间的33),现有代码完全缺失这部分处理。
  2. 邻近值逻辑的冗余与边界处理:
    • 原数组未去重,导致重复处理相同元素(如多次处理8、9),虽然后续去重不影响结果,但效率低下。
    • 使用indexOf判断元素存在性,效率远低于Set的has方法。
  3. 邻近值的判断逻辑虽能覆盖部分场景,但未结合去重后的数组进行判断,导致逻辑上的冗余重复。

修复后的代码

const lookAtNumber = [10, 0, 15, 18, 25, 8, 2, 4, 9, 9, 14, 34, 8, 32];

// 先对原数组去重并排序,方便后续处理
const uniqueSortedArr = [...new Set(lookAtNumber)].sort((a, b) => a - b);
const numberSet = new Set(uniqueSortedArr);

const sureHit = [];

// 处理邻近值(Closet)
uniqueSortedArr.forEach(item => {
  const prev = item - 1;
  const next = item + 1;
  const hasPrev = numberSet.has(prev);
  const hasNext = numberSet.has(next);
  
  // 某一侧相邻数存在,另一侧不存在
  if (hasPrev && !hasNext) {
    sureHit.push(next);
  } else if (!hasPrev && hasNext) {
    sureHit.push(prev);
  }
});

// 处理中间值(In Between)
for (let i = 0; i < uniqueSortedArr.length - 1; i++) {
  const current = uniqueSortedArr[i];
  const next = uniqueSortedArr[i + 1];
  // 相邻元素差为2时,中间的数即为目标
  if (next - current === 2) {
    sureHit.push(current + 1);
  }
}

// 去重并排序(确保结果有序且无重复)
const finalResult = [...new Set(sureHit)].sort((a, b) => a - b);
console.log(finalResult); // 输出: [1, 3, 7, 11, 13, 16, 33]

修复说明

  1. 预处理原数组:先去重并排序,同时转成Set,大幅提升元素存在性判断的效率。
  2. 邻近值逻辑优化:遍历去重后的数组,直接判断当前元素的前后相邻数是否存在,符合规则则加入结果。
  3. 新增中间值逻辑:遍历排序后的数组,检查相邻元素的差值,若为2则将中间数加入结果。
  4. 最后去重排序:确保结果无重复且按升序排列。

内容的提问来源于stack exchange,提问作者Perfect Roulette Deal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 15:20:07