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对象和DOM对象使用说明
Jun 25 Javascript
提高jQuery性能的十个诀窍
Nov 14 Javascript
JQuery1.8 判断元素是否绑定事件的方法
Jul 10 Javascript
javascript使用smipleChart实现简单图表
Jan 02 Javascript
JS模拟实现Select效果代码
Sep 24 Javascript
Bootstrap每天必学之附加导航(Affix)插件
Apr 25 Javascript
jQuery实现调整表格单列顺序完整实例
Jun 20 Javascript
jQGrid Table操作列中点击【操作】按钮弹出按钮层的实现代码
Dec 05 Javascript
关于 jQuery Easyui异步加载tree的问题解析
Dec 06 Javascript
微信小程序框架的页面布局代码
Aug 17 Javascript
jQuery 实现扁平式小清新导航
Jul 07 jQuery
解决父组件将子组件作为弹窗调用只执行一次created的问题
Jul 24 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/01 无线电
如何使用Strace调试工具
2013/06/03 PHP
PHP在线生成二维码(google api)的实现代码详解
2013/06/04 PHP
php设计模式之状态模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
jquery异步请求实例代码
2011/06/21 Javascript
修改jQuery Validation里默认的验证方法
2012/02/14 Javascript
div模拟滚动条效果示例代码
2013/10/16 Javascript
利用进制转换压缩数字函数分享
2014/01/02 Javascript
JS按回车键实现登录的方法
2014/08/25 Javascript
JavaScript返回网页中超链接数量的方法
2015/04/03 Javascript
JavaScript中var关键字的使用详解
2015/08/14 Javascript
剖析Node.js异步编程中的回调与代码设计模式
2016/02/16 Javascript
微信小程序 特效菜单抽屉效果实例代码
2017/01/11 Javascript
Vue Ajax跨域请求实例详解
2017/06/20 Javascript
jQuery Easyui Treegrid实现显示checkbox功能
2017/08/08 jQuery
在vue中使用vue-echarts-v3的实例代码
2018/09/13 Javascript
[01:03:47]VP vs NewBee Supermajor 胜者组 BO3 第一场 6.5
2018/06/06 DOTA
在Python的struct模块中进行数据格式转换的方法
2015/06/17 Python
利用Python代码实现数据可视化的5种方法详解
2018/03/25 Python
浅析python打包工具distutils、setuptools
2018/04/20 Python
python自动登录12306并自动点击验证码完成登录的实现源代码
2018/04/25 Python
Python3正则匹配re.split,re.finditer及re.findall函数用法详解
2018/06/11 Python
python 将list转成字符串,中间用符号分隔的方法
2018/10/23 Python
python使用BeautifulSoup与正则表达式爬取时光网不同地区top100电影并对比
2019/04/15 Python
基于Numpy.convolve使用Python实现滑动平均滤波的思路详解
2019/05/16 Python
python的help函数如何使用
2020/06/11 Python
Carolina工作鞋官网:Carolina Footwear
2019/03/14 全球购物
Linux不知道文件后缀名怎么判断文件类型
2014/08/21 面试题
新闻学毕业生自荐信
2013/11/15 职场文书
机电工程学生自荐信范文
2013/12/07 职场文书
婚礼新郎父母答谢词
2014/01/16 职场文书
财务科科长岗位职责
2014/03/10 职场文书
学校学习雷锋活动总结
2014/07/03 职场文书
关于感恩的演讲稿200字
2014/08/26 职场文书
Redis 配置文件重要属性的具体使用
2021/05/20 Redis
C#连接ORACLE出现乱码问题的解决方法
2021/10/05 Oracle