Odin Project数组多元素移除问题求助:仅实现单元素移除
解决移除数组中多个元素的问题
首先看你当前代码的核心问题:
- 硬编码了要移除的元素是
3,没法动态指定要移除的内容 - 只处理了单个元素,没有支持传入多个要移除的参数
- 函数参数只接收了数组,没接收要移除的元素列表
下面给你两种清晰的实现方式,都能支持移除多个元素:
方法一:使用filter创建新数组(推荐)
这种方式不会修改原数组,返回一个过滤后的新数组,逻辑简单易懂:
const removeFromArray = function(array, ...toRemove) { // 过滤出不在要移除列表里的元素 return array.filter(element => !toRemove.includes(element)); };
代码解释:
...toRemove是剩余参数语法,能把函数调用时传入的除了第一个数组之外的所有参数,打包成一个数组toRemovearray.filter()会遍历原数组的每个元素,只保留满足!toRemove.includes(element)的元素——也就是不在要移除列表里的元素- 比如调用
removeFromArray([1,2,3,4], 2, 4),会返回[1,3]
方法二:使用splice修改原数组(和你原来的思路衔接)
如果你想延续自己用splice的思路,需要注意:直接正序遍历数组并splice会导致索引错乱(删掉一个元素后,后面的元素会前移,导致跳过某些元素),所以要倒序遍历:
const removeFromArray = function(array, ...toRemove) { // 从数组末尾开始倒序遍历 for (let i = array.length - 1; i >= 0; i--) { // 如果当前元素在要移除列表里,就删掉它 if (toRemove.includes(array[i])) { array.splice(i, 1); } } return array; };
代码解释:
- 倒序遍历的时候,即使前面的元素被删掉,已经处理过的后面的索引不会受到影响,不会出现漏删的情况
- 比如原数组是
[2,3,2,4],要移除2,倒序遍历从索引3开始,到索引2时发现是2就删掉,再到索引0时发现是2也删掉,最终数组变成[3,4]
测试验证
你可以用这些例子测试:
removeFromArray([1,2,3,4], 3)→ 返回[1,2,4](单个元素移除)removeFromArray([1,2,2,3], 2, 3)→ 返回[1](多个元素移除)removeFromArray(["a","b","c"], "a", "c")→ 返回["b"](字符串元素也适用)
内容的提问来源于stack exchange,提问作者georgan1987
相关产品推荐
相关产品推荐

