如何修复筛选不含指定元素嵌套数组的JavaScript代码报错
原代码错误点
- 内层循环的迭代变量增量错误,写的是
i++,应该是j++,这个错误会导致内层循环陷入死循环,因为j永远不会增加,永远满足循环判断条件。 - 判断逻辑不符合需求:当前逻辑是只要子数组内有一个元素不等于目标元素,就把整个子数组推入结果数组,而且会随着内层循环的遍历重复推入同一个子数组多次。我们需要的是子数组内完全不存在目标元素时,才推入一次子数组。
修复后的双重循环版本(兼容原有写法逻辑)
function filteredArray(arr, elem) { let newArr = []; for (let i = 0; i < arr.length; i++) { // 标记当前子数组是否包含目标元素 let hasElem = false; for (let j = 0; j < arr[i].length; j++) { if (arr[i][j] === elem) { hasElem = true; // 找到目标元素后直接跳出内层循环,无需继续遍历 break; } } // 仅当子数组完全不包含目标元素时才推入结果 if (!hasElem) { newArr.push(arr[i]); } } return newArr; } // 测试用例所有子数组都包含3,所以输出空数组 console.log(filteredArray([ [3, 2, 3], [1, 6, 3], [3, 13, 26], [19, 3, 9] ], 3)); // 输出 []
更简洁的内置方法实现版本
function filteredArray(arr, elem) { // 直接过滤出所有不包含目标元素的子数组 return arr.filter(subArr => !subArr.includes(elem)); }
内容的提问来源于stack exchange,提问作者Mohammad Abdul Fahad
相关产品推荐
相关产品推荐

