
本文介绍在 javascript 中高效检测数组中相邻数字对的正确方法,避免嵌套循环导致的重复与越界问题,通过单层 for 循环配合 i < arr.length - 1 条件实现安全、简洁的成对访问。
本文介绍在 javascript 中高效检测数组中相邻数字对的正确方法,避免嵌套循环导致的重复与越界问题,通过单层 for 循环配合 i < arr.length - 1 条件实现安全、简洁的成对访问。
当你需要依次比较数组中相邻两个元素(如 [1, 3, 5, 9, 11, 12] 中的 (1,3), (3,5), (5,9) 等),关键在于理解:这不是所有组合(即笛卡尔积),而是连续索引对 (i, i+1)。此时,双重 for 循环不仅逻辑错误(会输出 arr[0] 与 arr[0]、arr[1]、… 所有元素的组合),还会造成大量冗余计算和潜在越界风险。
✅ 正确做法是使用单层 for 循环,让索引 i 遍历到倒数第二个元素即可:
const arr = [1, 3, 5, 9, 11, 12];
for (let i = 0; i < arr.length - 1; i++) {
const current = arr[i];
const next = arr[i + 1];
console.log(`Pair: ${current} and ${next}`);
}
// 输出:
// Pair: 1 and 3
// Pair: 3 and 5
// Pair: 5 and 9
// Pair: 9 and 11
// Pair: 11 and 12⚠️ 注意事项:
- 循环上限必须是 arr.length - 1(而非 arr.length),否则 arr[i + 1] 在最后一次迭代时将访问 arr[arr.length] —— 返回 undefined,可能导致逻辑错误或类型异常;
- 若需执行条件判断(例如“找出和为 14 的相邻对”),可直接在循环体内添加:
if (current + next === 14) { console.log(`Found pair summing to 14: [${current}, ${next}]`); }
? 扩展提示:若需求变为“所有不重复的两两组合”(非仅相邻),才需双循环,且内层起始应为 j = i + 1,避免自比与重复(如 (1,3) 和 (3,1));但本例明确要求相邻对,单循环是最优解 —— 时间复杂度 O(n),简洁、高效、易维护。

















