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 相关文章推荐
popdiv
Jul 14 Javascript
jQuery+css+html实现页面遮罩弹出框
Mar 21 Javascript
JS 删除字符串最后一个字符的实现代码
Feb 20 Javascript
浅析AngularJS中的生命周期和延迟处理
Jun 18 Javascript
JavaScript中的各种操作符使用总结
May 26 Javascript
JS仿京东移动端手指拨动切换轮播图效果
Apr 10 Javascript
微信小程序 登录实例详解
Jan 16 Javascript
js实现截图保存图片功能的代码示例
Feb 16 Javascript
JS实现简单拖拽效果
Jun 21 Javascript
解决vue-cli webpack打包后加载资源的路径问题
Sep 25 Javascript
对Layer弹窗使用及返回数据接收的实例详解
Sep 26 Javascript
Vue的Options用法说明
Aug 14 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
如何让搜索引擎抓取AJAX内容解决方案
2014/08/25 PHP
PHP实现QQ空间自动回复说说的方法
2015/12/02 PHP
PHP CURL中传递cookie的方法步骤
2019/05/09 PHP
jquery 1.3.2 IE8中的一点点的小问题解决方法
2009/07/10 Javascript
JS焦点图切换,上下翻转
2011/05/12 Javascript
Jquery UI震动效果实现原理及步骤
2013/02/04 Javascript
提交表单时执行func方法实现代码
2013/03/17 Javascript
基于编写jQuery的无缝滚动插件
2014/08/02 Javascript
html的DOM中Event对象onabort事件用法实例
2015/01/21 Javascript
jQuery选择器源码解读(五):tokenize的解析过程
2015/03/31 Javascript
jQuery实现从身份证号中获取出生日期和性别的方法分析
2016/02/25 Javascript
javascript实现列表切换效果
2016/05/02 Javascript
bootstrap 下拉多选框进行多选传值问题代码分析
2017/02/14 Javascript
Angular2环境搭建具体操作步骤(推荐)
2017/08/04 Javascript
前端把html表格生成为excel表格的实例
2017/09/19 Javascript
angularjs实现柱状图动态加载的示例
2017/12/11 Javascript
Vue路由模块化配置的完整步骤
2019/08/14 Javascript
layui实现多图片上传并限制上传的图片数量
2019/09/26 Javascript
微信小程序(订阅消息)功能
2019/10/25 Javascript
Vue中axios拦截器如何单独配置token
2019/12/27 Javascript
Python collections模块实例讲解
2014/04/07 Python
Windows下PyMongo下载及安装教程
2015/04/27 Python
使用Python的Tornado框架实现一个Web端图书展示页面
2016/07/11 Python
Python: glob匹配文件的操作
2020/12/11 Python
python中翻译功能translate模块实现方法
2020/12/17 Python
Hotels.com香港酒店网:你的自由行酒店订房专家
2018/01/22 全球购物
美国购买隐形眼镜网站:Lenses For Less
2020/07/05 全球购物
武汉某公司的C#笔试题面试题
2015/12/25 面试题
费用会计岗位职责
2014/01/01 职场文书
恶搞卫生巾广告词
2014/03/18 职场文书
关于青春的演讲稿800字
2014/08/22 职场文书
2014离婚协议书范文
2014/09/10 职场文书
社保转移委托书范本
2014/10/08 职场文书
不服劳动仲裁起诉书
2015/05/20 职场文书
Python爬取英雄联盟MSI直播间弹幕并生成词云图
2021/06/01 Python
Spring实现内置监听器
2021/07/09 Java/Android