如何判断嵌套数组子数组中是否存在指定顺序的连续元素对?
问题:生成不重复的连续元素对并添加到嵌套数组
我的嵌套数组示例:
[ [5, 10, 5, 15, 5, 10], [10, 15, 50, 350] ]
其中索引0的子数组为[5,10,5,15,5,10],索引1的子数组为[10,15,50,350]。
我需要实现:生成随机数对(x,y),添加到array[0]前,先判断array[0]中是否已存在x在前、y在后的连续元素对(比如数组里已有5紧跟15,就不能再添加5,15这个对),如果存在就重新生成随机数,直到找到不存在的对再添加。
原代码中array[0].includes(x,y)的用法错误,includes的第二个参数是查找起始索引,无法检测连续元素对,以下是正确实现方案:
实现步骤
- 编写辅助函数检测连续元素对
// 检查数组中是否存在指定的连续元素对 function hasConsecutivePair(arr, [first, second]) { // 遍历数组,只需要检查到倒数第二个元素 for (let i = 0; i < arr.length - 1; i++) { if (arr[i] === first && arr[i + 1] === second) { return true; } } return false; }
- 修改主逻辑,用do-while循环生成符合要求的随机数对
let array = [[], []]; // 示例随机数生成函数,可根据需求修改范围 function getRandomNum() { return Math.floor(Math.random() * 100) + 1; } // 生成10组符合要求的元素对 for (let i = 0; i < 10; i++) { let x, y; // 循环生成直到找到不存在的连续对 do { x = getRandomNum(); y = getRandomNum(); } while (hasConsecutivePair(array[0], [x, y])); array[0].push(x, y); }
说明
- 辅助函数
hasConsecutivePair遍历数组的前length-1个元素,逐个对比当前元素与下一个元素是否匹配目标元素对 - 使用
do-while循环确保先生成随机数对再进行检查,避免初始值干扰 - 每次生成新的
x,y后,调用辅助函数验证,只要存在重复的连续对就重新生成,直到符合条件再添加到数组中
内容的提问来源于stack exchange,提问作者leo
相关产品推荐
相关产品推荐

