如何编写JavaScript自定义数组方法删除指定元素的所有匹配项
方案1:无副作用返回新数组(推荐,最简洁)
优先选这种实现,没有副作用,逻辑清晰不易出错,仅需一行核心代码:
// 挂载到数组原型 Array.prototype.removeAllElements = function(target) { return this.filter(item => item !== target); };
使用示例:
const data = [1,2,3,4,2]; const result = data.removeAllElements(2); // result = [1,3,4],原数组data保持不变
如果不需要复用,直接调用原生filter方法即可,无需额外封装:
const result = data.filter(item => item !== 2);
方案2:修改原数组(和你原有方法行为一致)
如果要求和你最初的实现一样直接修改原数组,有两种简洁写法:
写法A:while循环匹配
Array.prototype.removeElement = function(target) { let index; while ((index = this.indexOf(target)) !== -1) { this.splice(index, 1); } };
写法B:倒序遍历删除
避免正序删除时数组长度变化导致的索引错位问题:
Array.prototype.removeElement = function(target) { for (let i = this.length - 1; i >= 0; i--) { this[i] === target && this.splice(i, 1); } };
两种写法使用效果一致:
const data = [1,2,3,4,2]; data.removeElement(2); // 原数组data直接变为 [1,3,4]
内容的提问来源于stack exchange,提问作者Behnam
相关产品推荐
相关产品推荐

