在JavaScript中使用for循环删除数组中的子数组

在JavaScript中使用for循环删除数组中的子数组,javascript,arrays,multidimensional-array,array-splice,Javascript,Arrays,Multidimensional Array,Array Splice,我需要删除一个子阵列,如果它有一个特定的元素 function filteredArray(arr, elem) { let newArr = []; for (let i = 0; i < arr.length; i++){ for (let j = 0; j < arr[i].length; j++) { if (arr[i][j] === elem) { arr.splice(i--, 1); newArr = [..

我需要删除一个子阵列,如果它有一个特定的元素

function filteredArray(arr, elem) {
  let newArr = [];
  for (let i = 0; i < arr.length; i++){
    for (let j = 0; j < arr[i].length; j++) {
      if (arr[i][j] === elem) {
        arr.splice(i--, 1);
        newArr = [...arr]
      }
    }
  }
  return newArr;
}
console.log(filteredArray([[3, 2, 3], [1, 6, 3], [3, 13, 26], [19, 3, 9]], 19));
如果仅为ex.19找到一次元素,则上述代码可以正常工作。但如果我尝试数字3,我会得到:uncaughttypeerror:无法读取未定义的属性'length'。有人能解释一下这里发生了什么吗?

试试Array.filter

函数过滤器DarrayArr,跳过{ 返回arr.filterfunctionsub{ return-1==sub.indexOfskip; }; } var mixed=[[3,2,3],[1,6,2],[3,13,26],[19,3,9]; console.logfilteredArraymixed,19; console.logfilteredArraymixed,3 请尝试数组.filter

函数过滤器DarrayArr,跳过{ 返回arr.filterfunctionsub{ return-1==sub.indexOfskip; }; } var mixed=[[3,2,3],[1,6,2],[3,13,26],[19,3,9]; console.logfilteredArraymixed,19; console.logfilteredArraymixed,3 使用with足够简洁,您可能不需要单独的函数:

让数组=[[3,2,3],[1,6,3],[3,13,26],[19,3,9]] 让filtered=array.filteritem=>!项目19; console.logfiltered使用with足够简洁,您可能不需要单独的函数:

让数组=[[3,2,3],[1,6,3],[3,13,26],[19,3,9]] 让filtered=array.filteritem=>!项目19;
logfiltered问题是,一旦您从数组中拼接了一个项,您的程序就会继续迭代删除的内部数组的其余部分,就好像它仍然存在一样。在3作为目标的情况下,每个内部数组都将被删除,因为它们都包含一个3。最后移除时,在内部阵列的索引1处检测到3,并拼接最后一个内部阵列。在循环的下一次迭代中,程序试图索引到空数组[]中的[0][2]时崩溃

解决方案是添加一个break语句,如下所示:;这将中止对已移除阵列的进一步检查:

函数过滤器{ 设newArr=[]; 对于let i=0;iconsole.logfilteredArray[[3,2,3],[1,6,3],[3,13,26],[19,3,9],[3 问题是,一旦您从数组中拼接了一个项,您的程序就会继续迭代删除的内部数组的其余部分,就好像它仍然存在一样。在3作为目标的情况下,每个内部数组都将被删除,因为它们都包含一个3。最后移除时,在内部阵列的索引1处检测到3,并拼接最后一个内部阵列。在循环的下一次迭代中,程序试图索引到空数组[]中的[0][2]时崩溃

解决方案是添加一个break语句,如下所示:;这将中止对已移除阵列的进一步检查:

函数过滤器{ 设newArr=[]; 对于let i=0;iconsole.logfilteredArray[[3,2,3],[1,6,3],[3,13,26],[19,3,9],[3;hereArvind采用了更好的逻辑,感谢您提供了出色的解决方案和简洁的代码。hereArvind采用了更好的逻辑,感谢您提供了出色的解决方案和简洁的代码。非常感谢您对我提供的代码的解释和解决方案:当然我会选择filter。非常感谢您对我提供的代码的解释和解决方案:我当然会选择过滤器。