JS删除数组指定值常用方法详解


Posted in Javascript onJune 04, 2020

一. 删除数组中所有指定值

先看一种危险的方式:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>
    <script type="text/javascript">
      window.onload = function() {
        var arr = [1, 1, 2, 2, 3, 3, 4, 4, 5, 5];
        console.log(`原始数组:${arr}`);
        arr.forEach((item, i) => {
          if (item == 3) {
            arr.splice(i, 1); // 从下标 i 开始, 删除 1 个元素
          }
        })
        console.log(`删除之后的数组:${arr}`);
      }
    </script>
  </body>
</html>

输出结果:

JS删除数组指定值常用方法详解

输出的结果中,只删除了一个3,这是因为splice方法删除数组一个指定值之后,数组发生改变,后续的值向前挪动一个位置,在接下来的循环遍历中,后面的3的下标由原本的5变成了4,这就导致删除操作之后,接着找下标为5的值的时候,找不到后面的值3了,而从值为4的元素接着遍历,当要删除的值不确实是1个的时候,这种遍历删除是危险的方式;

1. 如果使用splice方法循环遍历的方式删除指定值,一种保险的方式是逆向遍历:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>
    <script type="text/javascript">
      window.onload = function() {
        var arr = [1, 1, 2, 2, 3, 3, 4, 4, 5, 5];
        console.log(`原始数组:${arr}`);
        for (let i = arr.length - 1; i > -1; i--) {
          if (arr[i] == 3) {
            arr.splice(i, 1);
          }
        }
        console.log(`删除之后的数组:${arr}`);
      }
    </script>
  </body>
</html>

输出结果:

JS删除数组指定值常用方法详解

2. 使用filter方法过滤掉指定值:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>
    <script type="text/javascript">
      window.onload = function() {
        var arr = [1, 1, 2, 2, 3, 3, 4, 4, 5, 5];
        arr = arr.filter(item => item != 3); // 过滤掉值不为3,返回新数组
        console.log(`filter方法操作之后的数组:${arr}`);
      }
    </script>
  </body>
</html>

输出结果:

JS删除数组指定值常用方法详解

注意: filter方法不改变原数组,只是返回一个新数组;

二. 删除指定一个值

如果确定要删除的值只有一个,除了遍历查找删除之后,还可以使用some方法:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>
    <script type="text/javascript">
      window.onload = function() {
        var arr = [1, 2, 3, 4, 5];
        arr.some((item, i) => {
          if (item == 2) {
            arr.splice(i, 1);
            return true
          }
        })
        console.log(`删除之后的数组:${arr}`);
      }
    </script>
  </body>
</html>

输出结果:

JS删除数组指定值常用方法详解

注意: some方法找到符合条件的值手动返回true之后,不再接着遍历(如果将some替换成forEach,return是不起作用的);

除此之外,还可以使用findIndex方法:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>
    <script type="text/javascript">
      window.onload = function() {
        var arr = [1, 2, 3, 4, 5];
        console.log(`原始数组:${arr}`);
        var a = arr.findIndex(item => item == 3);
        arr.splice(a, 1);
        console.log(`删除之后的数组:${arr}`);
      }
    </script>
  </body>
</html>

输出结果:

JS删除数组指定值常用方法详解

注意: findIndex只找到第一个符合条件的下标,找不到就返回 -1;

详情查看MDN中关于数组的介绍:

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Jquery Ajax.ashx 高效分页实现代码
Oct 20 Javascript
JavaScript之引用类型介绍
Aug 10 Javascript
JavaScript onkeypress事件入门实例(按下或按住一个键盘按键)
Oct 17 Javascript
深入浅析JavaScript系列(13):This? Yes,this!
Jan 05 Javascript
JS获取鼠标坐标位置实例分析
Jan 20 Javascript
JavaScript知识点总结(五)之Javascript中两个等于号(==)和三个等于号(===)的区别
May 31 Javascript
JavaScript进阶练习及简单实例分析
Jun 03 Javascript
jquery根据一个值来选中select下的option实例代码
Aug 29 Javascript
jQuery按需加载轮播图(web前端性能优化)
Feb 17 Javascript
jQuery+Cookie实现切换皮肤功能【附源码下载】
Mar 25 jQuery
vue elementui el-form rules动态验证的实例代码详解
May 23 Javascript
mustache.js实现首页元件动态渲染的示例代码
Dec 28 Javascript
Vue项目接入Paypal实现示例详解
Jun 04 #Javascript
Paypal支付不完全指北
Jun 04 #Javascript
微信小程序学习总结(五)常见问题实例小结
Jun 04 #Javascript
vue样式穿透 ::v-deep的具体使用
Jun 04 #Javascript
微信小程序学习总结(四)事件与冒泡实例分析
Jun 04 #Javascript
微信小程序学习总结(三)条件、模板、文件引用实例分析
Jun 04 #Javascript
微信小程序实现watch监听
Jun 04 #Javascript
You might like
thinkphp中html:list标签传递多个参数实例
2014/10/30 PHP
PHP框架Laravel学习心得体会
2015/10/28 PHP
php实现处理输入转义字符的代码
2015/11/08 PHP
PHP用mysql_insert_id()函数获得刚插入数据或当前发布文章的ID
2016/11/25 PHP
PHP实现上传多文件示例代码
2017/02/20 PHP
PHP中创建和编辑Excel表格的方法
2018/09/13 PHP
基于jquery实现表格无刷新分页
2016/01/07 Javascript
NodeJS创建基础应用并应用模板引擎
2016/04/12 NodeJs
JS调用打印机功能简单示例
2016/11/28 Javascript
获取jqGrid中选择的行的数据
2016/11/30 Javascript
jQuery实现页面滚动时智能浮动定位
2017/01/08 Javascript
jQuery EasyUI tree增加搜索功能的实现方法
2017/04/27 jQuery
vue.js 获取当前自定义属性值
2017/06/01 Javascript
vue脚手架搭建项目的兼容性配置详解
2018/07/17 Javascript
@angular前端项目代码优化之构建Api Tree的方法
2018/12/24 Javascript
详解滑动穿透(锁body)终极探索
2019/04/16 Javascript
Vue中axios的封装(报错、鉴权、跳转、拦截、提示)
2019/08/20 Javascript
微信小程序之高德地图多点路线规划过程示例详解
2021/01/18 Javascript
[05:06]DOTA2-DPC中国联赛 正赛 VG vs Magma选手采访
2021/03/11 DOTA
python中迭代器(iterator)用法实例分析
2015/04/29 Python
Python中的index()方法使用教程
2015/05/18 Python
python爬虫实战之最简单的网页爬虫教程
2017/08/13 Python
Python3.4实现从HTTP代理网站批量获取代理并筛选的方法示例
2017/09/26 Python
利用python将图片转换成excel文档格式
2017/12/30 Python
python退出命令是什么?详解python退出方法
2018/12/10 Python
在python 中实现运行多条shell命令
2019/01/07 Python
Django框架使用mysql视图操作示例
2019/05/15 Python
Python Django 命名空间模式的实现
2019/08/09 Python
如何基于Python爬虫爬取美团酒店信息
2020/11/03 Python
Urban Outfitters英国官网:美国平价服饰品牌
2016/11/25 全球购物
美国伊甸园兄弟种子公司:Eden Brothers
2018/07/01 全球购物
西部世纪面试题
2014/12/05 面试题
教师自我反思材料
2014/02/14 职场文书
8g内存用python读取10文件_面试题-python 如何读取一个大于 10G 的txt文件?
2021/05/28 Python
Python道路车道线检测的实现
2021/06/27 Python
tomcat下部署jenkins的方法
2022/05/06 Servers