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插件
Feb 24 Javascript
用javascript模仿ie的自动完成类似自动完成功的表单
Dec 12 Javascript
jquery $.each 和for怎么跳出循环终止本次循环
Sep 27 Javascript
用javascript读取xml文件读取节点数据
Aug 12 Javascript
js HTML5 Ajax实现文件上传进度条功能
Feb 13 Javascript
在Mac OS上安装使用Node.js的项目自动化构建工具Gulp
Jun 18 Javascript
基于Require.js使用方法(总结)
Oct 26 Javascript
基于JavaScript实现报警器提示音效果
Oct 27 Javascript
webpack引入eslint配置详解
Jan 22 Javascript
vue获取当前激活路由的方法
Mar 17 Javascript
了解javascript中let和var及const关键字的区别
May 24 Javascript
JS实现audio音频剪裁剪切复制播放与上传(步骤详解)
Jul 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
颠覆常识!无色透明的咖啡诞生了(中日双语)
2021/03/03 咖啡文化
Apache中php.ini的设置方法
2013/02/28 PHP
解析php通过cookies获取远程网页的指定代码
2013/06/25 PHP
php获取域名的google收录示例
2014/03/24 PHP
ThinkPHP使用心得分享-分页类Page的用法
2014/05/15 PHP
phpstorm编辑器乱码问题解决
2014/12/01 PHP
PHP中Notice错误常见解决方法
2017/04/28 PHP
PHP实现基于回溯法求解迷宫问题的方法详解
2017/08/17 PHP
浅谈PHP封装CURL
2019/03/06 PHP
JavaScript XML操作 封装类
2009/07/01 Javascript
JQERY limittext 插件0.2版(长内容限制显示)
2010/08/27 Javascript
JavaScript之Getters和Setters 平台支持等详细介绍
2012/12/07 Javascript
js中widow.open()方法使用详解
2013/07/30 Javascript
JavaScript的removeChild()函数用法详解
2015/12/27 Javascript
jQuery webuploader分片上传大文件
2016/11/07 Javascript
详解JavaScript中return的用法
2017/05/08 Javascript
详解在Angular项目中添加插件ng-bootstrap
2017/07/04 Javascript
Angular2 自定义validators的实现方法
2017/07/05 Javascript
详解auto-vue-file:一个自动创建vue组件的包
2019/04/26 Javascript
Python 基础知识之字符串处理
2017/01/06 Python
全面了解Nginx, WSGI, Flask之间的关系
2018/01/09 Python
在Python中实现替换字符串中的子串的示例
2018/10/31 Python
python3+selenium实现126邮箱登陆并发送邮件功能
2019/01/23 Python
什么是Python变量作用域
2020/06/03 Python
MediaMarkt比利时:欧洲最大电器连锁店
2020/12/21 全球购物
网络信息管理员岗位职责
2014/01/05 职场文书
2014年小学元旦活动方案
2014/02/12 职场文书
《盘古开天地》教学反思
2014/02/28 职场文书
读群众路线心得体会
2014/03/07 职场文书
《生命的药方》教学反思
2014/04/08 职场文书
家庭困难证明
2014/10/12 职场文书
师德师风整改措施
2014/10/24 职场文书
2015年度个人教学工作总结
2015/05/20 职场文书
调研报告的主要写法
2019/04/18 职场文书
解决python3安装pandas出错的问题
2021/05/20 Python
MySQL学习之基础操作总结
2022/03/19 MySQL