移除数组中匹配参数的元素返回新数组时遇空数组问题
问题分析与修复
先把你的代码问题拆解清楚:
forEach()方法本身没有返回值(永远返回undefined),所以你的if(arrays.forEach(...))条件永远不成立,自然不会往newArray里塞任何元素,结果就是空数组。- 逻辑顺序搞反了:你应该遍历原数组的每个元素,判断这个元素是否不在需要移除的
args列表里,而不是反过来遍历args去检查数组。 - 回调里的
element是局部变量,外面的newArray.push(element)根本拿不到这个变量,即使条件成立也会报错。
修复后的代码
const removeFromArray = function(arrays, ...args) { const newArray = []; // 遍历原数组的每个元素 arrays.forEach((element) => { // 判断当前元素是否不在要移除的参数列表里 if (!args.includes(element)) { newArray.push(element); } }); return newArray; } console.log(removeFromArray([1,2,3], 3)); // 输出 [1,2]
更简洁的写法(可选)
用filter方法一行搞定,逻辑更清晰:
const removeFromArray = function(arrays, ...args) { return arrays.filter(element => !args.includes(element)); }
内容的提问来源于stack exchange,提问作者M Codet
相关产品推荐
相关产品推荐

