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 相关文章推荐
超级简单实现JavaScript MVC 样式框架
Mar 24 Javascript
面向切面编程(AOP)的理解
May 01 Javascript
微信小程序 页面跳转传参详解
Oct 28 Javascript
JS实现重新加载当前页面或者父页面的几种方法
Nov 30 Javascript
node.js入门教程之querystring模块的使用方法
Feb 27 Javascript
JavaScript运动框架 链式运动到完美运动(五)
May 18 Javascript
vue.js实现单选框、复选框和下拉框示例
Jul 18 Javascript
Three.js利用顶点绘制立方体的方法详解
Sep 27 Javascript
js实现登录与注册界面
Nov 01 Javascript
vue 项目中使用Loading组件的示例代码
Aug 31 Javascript
Angular使用Restful的增删改
Dec 28 Javascript
layui的数据表格+springmvc实现搜索功能的例子
Sep 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
查找mysql字段中固定字符串并替换的几个方法
2012/09/23 PHP
WordPress中缩略图的使用以及相关技巧
2015/11/24 PHP
PHP预定义超全局数组变量小结
2018/08/20 PHP
javascript编程起步(第七课)
2007/02/27 Javascript
在html页面上拖放移动标签
2010/01/08 Javascript
JQuery 获得绝对,相对位置的坐标方法
2010/02/09 Javascript
javasciprt下jquery函数$.post执行无响应的解决方法
2014/03/13 Javascript
JavaScript实现简单图片翻转的方法
2015/04/17 Javascript
jquery右下角自动弹出可关闭的广告层
2015/05/08 Javascript
javascript学习笔记之函数定义
2015/06/25 Javascript
jQuery超简单选项卡完整实例
2015/09/26 Javascript
AngularJS实现的回到顶部指令功能实例
2017/05/17 Javascript
防止页面url缓存中ajax中post请求的处理方法
2017/10/10 Javascript
如何制作一个Node命令行图像识别工具
2018/12/12 Javascript
深入理解es6块级作用域的使用
2019/03/28 Javascript
vue 项目 iOS WKWebView 加载
2019/04/17 Javascript
Vue注册组件命名时不能用大写的原因浅析
2019/04/25 Javascript
JavaScript:ES2019 的新特性(译)
2019/08/08 Javascript
解决Vue的项目使用Element ui 走马灯无法实现的问题
2020/08/03 Javascript
详解Vue数据驱动原理
2020/11/17 Javascript
[01:47]2018年度DOTA2最具人气解说-完美盛典
2018/12/16 DOTA
python使用cookie库操保存cookie详解
2014/03/03 Python
python中Genarator函数用法分析
2015/04/08 Python
python学习开发mock接口
2019/04/28 Python
python抓取需要扫微信登陆页面
2019/04/29 Python
PyQt5 对图片进行缩放的实例
2019/06/18 Python
解决Python图形界面中设置尺寸的问题
2020/03/05 Python
借助Paramiko通过Python实现linux远程登陆及sftp的操作
2020/03/16 Python
ProBikeKit新西兰:自行车套件,跑步和铁人三项装备
2017/04/05 全球购物
我的珠宝盒:Ma boîte à bijoux
2019/08/27 全球购物
英国自行车商店:AW Cycles
2021/02/24 全球购物
《从现在开始》教学反思
2014/04/15 职场文书
机关驾驶员违规检讨书
2014/09/13 职场文书
“四风”问题的主要表现和危害思想汇报
2014/09/19 职场文书
上级领导检查欢迎词
2015/09/30 职场文书
MySQL sql_mode的使用详解
2021/05/08 MySQL