在JavaScript开发过程中,数组相邻元素比较并根据规则生成新结果数组是常见需求,比如判断相邻元素是否相等、计算相邻元素的差值、提取符合条件的相邻元素对等都可以通过这类逻辑实现。

基础实现:使用for循环比较相邻元素
for循环是最基础的循环方式,通过索引从0遍历到数组长度减2,就可以同时拿到当前元素和下一个相邻元素,比较后生成结果。
下面的示例实现比较两个相邻元素,如果后一个元素大于前一个元素,就把差值放入结果数组:
// 原始数组
const originArr = [3, 7, 2, 9, 5];
// 存储结果的数组
const resultArr = [];
// 循环到倒数第二个元素,避免索引越界
for (let i = 0; i < originArr.length - 1; i++) {
const current = originArr[i];
const next = originArr[i + 1];
// 比较相邻元素,后一个大于前一个则存入差值
if (next > current) {
resultArr.push(next - current);
}
}
console.log(resultArr); // 输出 [4, 7]
使用forEach方法实现相邻比较
forEach是数组的原生遍历方法,代码更简洁,同样可以通过索引控制访问相邻元素,注意要限制遍历的边界。
const originArr = [10, 5, 8, 3, 12];
const resultArr = [];
originArr.forEach((item, index) => {
// 当不是最后一个元素时,才和下一个元素比较
if (index < originArr.length - 1) {
const nextItem = originArr[index + 1];
// 比较规则:相邻元素相等时存入元素值
if (item === nextItem) {
resultArr.push(item);
}
}
});
console.log(resultArr); // 输出 []
使用reduce方法生成结果数组
reduce方法可以在遍历过程中累积结果,不需要额外声明结果数组,逻辑更紧凑,适合函数式编程场景。
const originArr = [2, 4, 4, 6, 3];
const resultArr = originArr.reduce((acc, current, index, arr) => {
// 不是最后一个元素时处理相邻比较
if (index < arr.length - 1) {
const next = arr[index + 1];
// 规则:相邻元素之和大于10时存入和
if (current + next > 10) {
acc.push(current + next);
}
}
return acc;
}, []);
console.log(resultArr); // 输出 [10]
不同实现方式的对比
三种常见实现方式的特性如下:
| 实现方式 | 优势 | 适用场景 |
|---|---|---|
| for循环 | 性能最优,逻辑直观,可灵活控制循环流程 | 对性能要求高、需要复杂循环控制的场景 |
| forEach方法 | 代码简洁,无需手动维护索引变量 | 简单遍历、不需要中断循环的场景 |
| reduce方法 | 无需额外声明结果变量,函数式风格 | 需要累积计算结果、偏好函数式编程的场景 |
注意事项
- 比较相邻元素时必须注意数组边界,最后一个元素没有下一个相邻元素,遍历时要限制索引范围,避免出现
undefined的比较错误。 - 如果原始数组长度小于2,不存在相邻元素,结果数组应该直接返回空数组,不需要执行比较逻辑。
- 比较规则需要根据业务需求自定义,比如可以比较大小、判断相等、计算差值、拼接字符串等,灵活调整判断条件即可。
实际开发中可以根据团队代码规范和具体需求选择合适的实现方式,优先保证代码可读性和正确性,再考虑性能优化。
JavaScript数组循环相邻元素比较结果数组修改时间:2026-07-02 12:18:34