Javascript循环删除数组中元素的几种方法示例


Posted in Javascript onMay 18, 2017

本文主要跟大家分享了关于Javascript循环删除数组中元素的几种方法,分享出来供大家参考学习,下面来看看详细的介绍:

发现问题

大家在码代码的过程中,经常会遇到在循环中移除指定元素的需求。按照常规的思路,直接一个for循环,然后在循环里面来个if判断,在判断中删除掉指定元素即可。但是实际情况往往不会像预想的那样顺利运行。

下面以一段Javascript代码为例演示这一过程。

(function () {
 var arr = [1,2,2,3,4,5];
 var len = arr.length;
 for(var i=0;i<len;i++){
 //打印数组中的情况,便于跟踪数组中数据的变化
 console.log(i+"="+arr[i]);
 //删除掉所有为2的元素
 if(arr[i]==2){
  arr.splice(i,1);
 }
 }
 console.log(arr);
})();

运行结果如下:

Javascript循环删除数组中元素的几种方法示例

从最终的结果可以看到实际上只删除掉了匹配的其中一个元素,而另外一个元素还存在。

从打印出的运行过程不难发现,原因为当删除掉了一个元素后,数组的索引发生的变化,造成了程序的异常。

解决方法

找到了问题的原因,就不难解决问题了。

方法一

(function () {
 var arr = [1,2,2,3,4,5];
 var len = arr.length;
 for(var i=0;i<len;i++){
 //打印数组中的情况,便于跟踪数组中数据的变化
 console.log(i+"="+arr[i]);
 //删除掉所有为2的元素
 if(arr[i]==2){
  //注意对比这行代码:删除元素后调整i的值
  arr.splice(i--,1);
 }
 }
 console.log(arr);
})();

上面的代码看起来不大好理解,有没有看起来更易于理解的代码呢?请看下面

方法二

(function () {
 var arr = [1,2,2,3,4,5];
 var len = arr.length-1;
 //start from the top
 for(var i=len;i>=0;i--){
 console.log(i+"="+arr[i]);
 if(arr[i]==2){
  arr.splice(i,1);
 }
 }
 console.log(arr);
})();

从后往前遍历可以有效解决问题,也容易理解,那么还有没有跟简洁的实现呢?接着看下面代码

方法三

(function () {
 var arr = [1,2,2,3,4,5];
 var i = arr.length;
 while(i--){
 console.log(i+"="+arr[i]);
 if(arr[i]==2){
  arr.splice(i,1);
 }
 }
 console.log(arr);
})();

使用while(i--) ,i为数组下标,个人觉得这是最简洁、高效的代码实现了。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
parentElement,srcElement的使用小结
Jan 13 Javascript
JQuery中绑定事件(bind())和移除事件(unbind())
Feb 27 Javascript
浅谈jQuery构造函数分析
May 11 Javascript
全面解析bootstrap格子布局
May 22 Javascript
Web程序员必备的7个JavaScript函数
Jun 14 Javascript
基于Layer+jQuery的自定义弹框
May 26 Javascript
js常用DOM方法详解
Feb 04 Javascript
angular学习之ngRoute路由机制
Apr 12 Javascript
微信小程序实战之登录页面制作(5)
Mar 30 Javascript
vue的一个分页组件的示例代码
Dec 25 Javascript
浅谈Node新版本13.2.0正式支持ES Modules特性
Nov 25 Javascript
浅谈VUE中演示v-for为什么要加key
Jan 16 Javascript
Javascript实现信息滚动效果
May 18 #Javascript
详解Vue-cli 创建的项目如何跨域请求
May 18 #Javascript
Bootstrap table学习笔记(2) 前后端分页模糊查询
May 18 #Javascript
BootStrap 导航条实例代码
May 18 #Javascript
AngularJS全局警告框实现方法示例
May 18 #Javascript
第一次记录Bootstrap table学习笔记(1)
May 18 #Javascript
原生js轮播特效
May 18 #Javascript
You might like
Zend Framework教程之Zend_Controller_Plugin插件用法详解
2016/03/07 PHP
Laravel配置全局公共函数的方法步骤
2019/05/09 PHP
jQuery LigerUI 使用教程表格篇(1)
2012/01/18 Javascript
用js判断页面是否加载完成实现代码
2012/12/11 Javascript
jQuery的$.proxy()应用示例介绍
2014/04/03 Javascript
AngularJS入门教程(一):静态模板
2014/12/06 Javascript
javascript中clipboardData对象用法详解
2015/05/13 Javascript
jquery自适应布局的简单实例
2016/05/28 Javascript
JavaScript中的遍历详解(多种遍历)
2017/04/07 Javascript
微信小程序 检查接口状态实例详解
2017/06/23 Javascript
ES6学习教程之块级作用域详解
2017/10/09 Javascript
解决vue-quill-editor上传内容由于图片是base64的导致字符太长的问题
2018/08/20 Javascript
webstorm建立vue-cli脚手架的傻瓜式教程
2020/09/22 Javascript
Python中py文件引用另一个py文件变量的方法
2018/04/29 Python
在Pycharm中对代码进行注释和缩进的方法详解
2019/01/20 Python
Python3 修改默认环境的方法
2019/02/16 Python
pytorch 获取tensor维度信息示例
2020/01/03 Python
Python实现捕获异常发生的文件和具体行数
2020/04/25 Python
Pytorch数据拼接与拆分操作实现图解
2020/04/30 Python
Python 私有属性和私有方法应用场景分析
2020/06/19 Python
python等待10秒执行下一命令的方法
2020/07/19 Python
Python在字符串中处理html和xml的方法
2020/07/31 Python
matplotlib部件之矩形选区(RectangleSelector)的实现
2021/02/01 Python
微软英国官方网站:Microsoft英国
2016/10/15 全球购物
全球性的在线购物网站:Zapals
2017/03/22 全球购物
Yahoo的PHP面试题
2014/05/26 面试题
Ajxa常见问题都有哪些
2014/03/26 面试题
详细的大学生创业计划书模板
2014/01/27 职场文书
工作评语大全
2014/04/26 职场文书
蟋蟀的住宅教学反思
2014/04/26 职场文书
小学校长先进事迹材料
2014/05/13 职场文书
本科毕业生自荐信
2014/05/26 职场文书
模具专业自荐信
2014/05/29 职场文书
2016年第29个世界无烟日宣传活动总结
2016/04/06 职场文书
自制短波长线天线频率预选器 - 成功消除B2K之流的镜像
2021/04/22 无线电
剖析后OpLog订阅MongoDB的数据变更就没那么难了
2022/02/24 MongoDB