无法从嵌套数组中移除指定元素的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
相关产品推荐
相关产品推荐

