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 相关文章推荐
jQuery 使用手册(一)
Sep 23 Javascript
屏蔽Flash右键信息的js代码
Jan 17 Javascript
JavaScript对数字的判断与处理实例分析
Feb 02 Javascript
js将json格式的对象拼接成复杂的url参数方法
May 25 Javascript
JS基于构造函数实现的菜单滑动显隐效果【测试可用】
Jun 21 Javascript
Javascript中函数名.length属性用法分析(对比arguments.length)
Sep 16 Javascript
微信小程序表单验证功能完整实例
Dec 01 Javascript
JS中appendChild追加子节点无效的解决方法
Oct 14 Javascript
微信小程序授权登录解决方案的代码实例(含未通过授权解决方案)
May 10 Javascript
layui默认选中table的CheckBox复选框方法
Sep 19 Javascript
Vue如何获取数据列表展示
Dec 11 Javascript
使用refresh_token实现无感刷新页面
Apr 26 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
IIS6的PHP最佳配置方法
2007/03/19 PHP
基于php判断客户端类型
2016/10/14 PHP
php从身份证获取性别和出生年月
2017/02/09 PHP
用innerhtml提高页面打开速度的方法
2013/08/02 Javascript
在父页面调用子页面的JS方法
2013/09/29 Javascript
不使用jquery实现js打字效果示例分享
2014/01/19 Javascript
js使用onmousemove和onmouseout获取鼠标坐标的方法
2015/03/31 Javascript
jQuery控制DIV层实现由大到小,由远及近动画变化效果
2015/10/09 Javascript
深入php面向对象、模式与实践
2016/02/16 Javascript
JS中对数组元素进行增删改移的方法总结
2016/12/15 Javascript
利用jquery正则表达式在页面验证url网址输入是否正确
2017/04/04 jQuery
NodeJS实现视频转码的示例代码
2017/11/18 NodeJs
jQuery图片加载失败替换默认图片方法汇总
2017/11/29 jQuery
vue中slot(插槽)的介绍与使用
2018/11/12 Javascript
jquery实现动态改变css样式的方法分析
2019/05/27 jQuery
vue内置组件component--通过is属性动态渲染组件操作
2020/07/28 Javascript
vue-cli —— 如何局部修改Element样式
2020/10/22 Javascript
[37:02]OG vs INfamous 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
python列表操作实例
2015/01/14 Python
python妹子图简单爬虫实例
2015/07/07 Python
Python学习之Anaconda的使用与配置方法
2018/01/04 Python
Python中pow()和math.pow()函数用法示例
2018/02/11 Python
Python基于pycrypto实现的AES加密和解密算法示例
2018/04/10 Python
Python设置在shell脚本中自动补全功能的方法
2018/06/25 Python
Python在centos7.6上安装python3.9的详细教程(默认python版本为2.7.5)
2020/10/15 Python
CSS3盒子模型详解
2013/04/24 HTML / CSS
Baby Tulai澳大利亚:美国婴儿背带品牌
2018/10/15 全球购物
AP澳洲中文网:澳洲正品直邮,包税收件无忧
2019/07/12 全球购物
简述进程的启动、终止的方式以及如何进行进程的查看
2014/02/20 面试题
如何通过 CSS 写出火焰效果
2021/03/24 HTML / CSS
小学教师听课制度
2014/02/01 职场文书
军训拉歌口号
2014/06/13 职场文书
个人批评与自我批评材料
2014/10/17 职场文书
邀请函模板
2015/02/02 职场文书
求职简历自我评价怎么写
2015/03/10 职场文书
vue2实现provide inject传递响应式
2021/05/21 Vue.js