You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法从嵌套数组中移除指定元素的JavaScript代码问题求助

问题解决:嵌套数组移除指定索引元素

问题原因分析

  • 你使用forEach的核心问题:forEach方法本身没有返回值,默认返回undefined,所以newArray被赋值成了undefined,这就是它无法正确获取结果的原因。
  • 原数组arrayOfArrays未发生变化是正常现象:你用到的filter方法是纯函数,它会返回一个新数组,不会修改原数组本身——这其实是更安全的编程方式,避免意外修改原数据。

正确实现代码(推荐方案)

用map方法替代forEach,map会遍历数组并返回由每次回调结果组成的新数组,完美匹配我们生成新嵌套数组的需求:

const arrayOfArrays = [[80,60,40,17,19],[100,88,1234,99,12]];
const newArray = arrayOfArrays.map(array => 
  array.filter((value, index) => ![2, 3].includes(index))
);
console.log(newArray); // 输出目标结果:[[80,60,19],[100,88,12]]

原理说明

  • map遍历外层数组的每个内层数组,对每个内层数组执行filter操作;
  • filter的回调函数判断元素索引是否为2或3,保留不符合条件的元素,最终返回过滤后的新内层数组;
  • 所有过滤后的内层数组会被map收集成一个新数组,赋值给newArray。

可选:修改原数组的方案(不推荐)

如果你确实需要直接修改原数组(不建议,容易引发副作用),可以用forEach结合splice,但要注意倒序删除元素,避免索引偏移:

const arrayOfArrays = [[80,60,40,17,19],[100,88,1234,99,12]];
arrayOfArrays.forEach(array => {
  // 从索引3开始倒序删除,防止删除元素后后续索引错位
  for (let i = 3; i >= 2; i--) {
    array.splice(i, 1);
  }
});
console.log(arrayOfArrays); // 输出修改后的原数组:[[80,60,19],[100,88,12]]

内容的提问来源于stack exchange,提问作者Nigel Smith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 09:51:08