在处理数组相关逻辑时,检测相邻元素的特征并进行组合逻辑判断是高频需求,比如判断数组中是否存在连续递增的相邻元素、是否有两个相邻元素的和满足特定条件,或者提取所有符合规则的相邻元素组合。

常见的相邻元素模式类型
实际开发中遇到的相邻元素模式主要分为以下几类:
- 连续性模式:相邻元素差值固定,比如连续递增1、连续递减2等
- 运算关系模式:相邻元素满足指定运算规则,比如和为偶数、乘积大于阈值等
- 特征匹配模式:相邻元素都符合特定特征,比如都是正整数、都包含指定字符等
基础检测实现方法
检测相邻元素是否连续递增
我们可以通过遍历数组,对比当前元素和下一个元素的差值来判断是否符合连续递增模式,以下以JavaScript为例实现:
function checkAdjacentIncrement(arr, step = 1) {
// 数组长度小于2时无法判断相邻元素,直接返回false
if (arr.length < 2) return false;
for (let i = 0; i < arr.length - 1; i++) {
// 判断当前元素和下一个元素的差值是否等于指定步长
if (arr[i + 1] - arr[i] !== step) {
return false;
}
}
return true;
}
// 测试示例
const testArr1 = [1, 2, 3, 4, 5];
const testArr2 = [1, 3, 5, 7];
console.log(checkAdjacentIncrement(testArr1)); // 输出true
console.log(checkAdjacentIncrement(testArr2, 2)); // 输出true
检测相邻元素组合是否满足运算条件
如果需要判断相邻两个元素的和是否大于指定阈值,同样可以通过遍历实现:
function checkAdjacentSum(arr, threshold) {
const result = [];
if (arr.length < 2) return result;
for (let i = 0; i < arr.length - 1; i++) {
const sum = arr[i] + arr[i + 1];
// 记录满足条件的相邻元素索引和和值
if (sum > threshold) {
result.push({
index: i,
elements: [arr[i], arr[i + 1]],
sum: sum
});
}
}
return result;
}
// 测试示例
const testArr3 = [1, 2, 3, 10, 5];
console.log(checkAdjacentSum(testArr3, 5));
// 输出 [{index:1,elements:[2,3],sum:5}, {index:2,elements:[3,10],sum:13}, {index:3,elements:[10,5],sum:15}]
复杂组合逻辑判断实现
多条件组合判断相邻元素模式
实际场景中往往需要同时满足多个条件,比如相邻元素都是偶数且差值小于3,我们可以通过组合判断条件实现:
function checkMultiCondition(arr) {
const matchList = [];
if (arr.length < 2) return matchList;
for (let i = 0; i < arr.length - 1; i++) {
const cur = arr[i];
const next = arr[i + 1];
// 多条件判断:都是偶数、差值小于3、下一个元素大于当前元素
if (cur % 2 === 0 && next % 2 === 0 && Math.abs(next - cur) < 3 && next > cur) {
matchList.push([cur, next]);
}
}
return matchList;
}
// 测试示例
const testArr4 = [2, 4, 6, 3, 8, 10];
console.log(checkMultiCondition(testArr4)); // 输出 [[2,4], [8,10]]
提取所有符合模式的相邻元素组合
如果需要提取数组中长度不固定的相邻元素组合,比如连续大于5的相邻元素序列,可以通过如下方式实现:
function extractAdjacentPattern(arr, conditionFn) {
const result = [];
let temp = [];
for (let i = 0; i < arr.length; i++) {
// 判断当前元素是否满足基础条件
if (conditionFn(arr[i])) {
temp.push(arr[i]);
// 判断下一个元素是否也满足条件,满足则继续加入临时数组
if (i < arr.length - 1 && conditionFn(arr[i + 1])) {
continue;
} else {
// 临时数组长度大于等于2时记录为有效组合
if (temp.length >= 2) {
result.push([...temp]);
}
temp = [];
}
} else {
temp = [];
}
}
return result;
}
// 测试示例:提取连续大于5的相邻元素组合
const testArr5 = [3, 6, 7, 8, 2, 9, 10, 11];
console.log(extractAdjacentPattern(testArr5, (val) => val > 5));
// 输出 [[6,7,8], [9,10,11]]
注意事项
在进行相邻元素检测时需要注意几个细节:
- 首先要判断数组长度,长度小于2时不存在相邻元素,避免遍历时出现越界问题
- 处理差值、运算结果时注意数据类型的兼容性,避免字符串和数字混合运算导致结果错误
- 组合逻辑判断时如果需要复用条件,建议将条件封装为独立的函数,提升代码可读性和复用性
以上方法覆盖了大部分数组相邻元素检测和组合逻辑判断的场景,开发者可以根据实际需求调整判断条件和返回内容,适配不同的业务场景。
数组检测相邻元素模式组合逻辑判断JavaScript修改时间:2026-06-21 19:18:33