查看: 91|回复: 1

JavaScript删除数组元素:splice与自定义remove方法详解

[复制链接]
发表于 3 小时前 | 显示全部楼层 |阅读模式
在JavaScript开发中,删除数组中的某个元素是高频操作。不同场景下,需要选择不同的删除方式。本文总结几种常见实现方案,包括自定义原型方法、原生splice以及delete的差异,帮助开发者根据实际需求选用合适的方法。

一、自定义indexOf与remove方法(兼容旧浏览器)

早期JavaScript数组未提供indexOf方法,为了通用性可以给Array原型添加自定义方法。首先定义indexOf,用于查找元素首次出现的索引:
  1. Array.prototype.indexOf = function(val) {
  2.     for (var i = 0; i < this.length; i++) {
  3.         if (this[i] == val) return i;
  4.     }
  5.     return -1;
  6. };
复制代码

然后基于indexOf实现remove,通过splice删除元素:
  1. Array.prototype.remove = function(val) {
  2.     var index = this.indexOf(val);
  3.     if (index > -1) {
  4.         this.splice(index, 1);
  5.     }
  6. };
复制代码

使用示例:
  1. var emp = ['abs','dsf','sdf','fd'];
  2. emp.remove('fd');
  3. console.log(emp); // ['abs','dsf','sdf']
复制代码

注意:原型方法会污染全局Array,现代浏览器建议直接使用Array.prototype.includes和splice,或使用函数式工具(如lodash)。

二、原生splice方法:删除、替换、添加

splice(index, len, item) 是数组最灵活的方法,会直接修改原数组。参数含义:
- index:操作起始下标
- len:要删除的元素个数(0表示不删除)
- item:可选,用于替换/添加的新元素

1. 删除操作

删除起始下标为1的一个元素:
  1. var arr = ['a','b','c','d'];
  2. arr.splice(1,1);
  3. console.log(arr); // ['a','c','d']
复制代码

删除起始下标为1的两个元素:
  1. var arr2 = ['a','b','c','d'];
  2. arr2.splice(1,2);
  3. console.log(arr2); // ['a','d']
复制代码

2. 替换操作

将下标1处的一个元素替换为'ttt':
  1. var arr = ['a','b','c','d'];
  2. arr.splice(1,1,'ttt');
  3. console.log(arr); // ['a','ttt','c','d']
复制代码

将下标1开始的两个元素替换为一个'ttt':
  1. var arr2 = ['a','b','c','d'];
  2. arr2.splice(1,2,'ttt');
  3. console.log(arr2); // ['a','ttt','d']
复制代码

3. 添加操作(len=0)

在下标1处插入'ttt',不删除任何元素:
  1. var arr = ['a','b','c','d'];
  2. arr.splice(1,0,'ttt');
  3. console.log(arr); // ['a','ttt','b','c','d']
复制代码

三、delete方法:不推荐用于数组删除

delete操作符会将指定下标的元素置为undefined,但数组长度不变,留下空位,导致遍历时出现稀疏数组问题:
  1. var arr = ['a','b','c','d'];
  2. delete arr[1];
  3. console.log(arr); // ['a', undefined × 1, 'c', 'd']
  4. console.log(arr.length); // 4
复制代码

这种结果通常不符合预期,开发中应避免对数组使用delete,改用splice或filter。

四、总结与建议

- 如果只需删除单个已知值的元素,推荐使用splice(index,1),配合findIndex或indexOf获取索引。
- 如果需要删除多个满足条件的元素,可以使用filter生成新数组(不改变原数组)。
- 自定义原型方法在团队项目中可能引发冲突,建议封装为独立工具函数(如Utils.removeArrayItem)。
- 注意splice会改变原数组,如果希望保留原数组,请先拷贝一份(如arr.slice())。

掌握splice的三种用法(删除、替换、添加),足以应对绝大部分数组操作需求,而delete仅适合用于对象属性删除,不应在数组中滥用。
回复

使用道具 举报

发表于 3 小时前 | 显示全部楼层

Re: JavaScript删除数组元素:splice与自定义remove方法详解

楼主总结得很全面!splice 确实是 JS 里处理数组的利器,删除、替换、添加一把梭,比 delete 好用太多。自定义原型方法那段也很有价值,虽然现在主流浏览器都支持 indexOf 和 includes 了,但遇到老旧项目或者想加深理解时,自己实现一遍还是能学到东西的。另外提一下,如果需要频繁删除多个元素,用 filter 生成新数组时记得考虑性能,或者可以先收集索引再倒序 splice,避免索引错乱。感谢分享!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

Hacking Group 021A

旗下站点

态势感知中心

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

官方邮箱:security#ihonker.org(#改成@)

官方核心成员

关注微信公众号

Archiver|手机版|小黑屋| ( 沪ICP备2021026908号 )

GMT+8, 2026-6-12 15:10 , Processed in 0.027458 second(s), 18 queries , Gzip On, Redis On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部