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 相关文章推荐
最近项目写了一些js,水平有待提高
Jan 31 Javascript
JS验证日期的格式YYYY-mm-dd 具体实现
Jun 29 Javascript
常见的原始JS选择器使用方法总结
Apr 09 Javascript
window.location.href的用法(动态输出跳转)
Aug 09 Javascript
JavaScript检测浏览器cookie是否已经启动的方法
Feb 27 Javascript
JavaScript中神奇的call()方法
Mar 12 Javascript
实例讲解javascript注册事件处理函数
Jan 09 Javascript
字符串反转_JavaScript
Apr 28 Javascript
用jQuery.ajaxSetup实现对请求和响应数据的过滤
Dec 20 Javascript
详解javascript表单的Ajax提交插件的使用
Dec 29 Javascript
JavaScript编写九九乘法表(两种任选)
Feb 04 Javascript
解决vue中使用swiper插件问题及swiper在vue中的用法
Apr 04 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
从零开始 教你如何搭建Discuz!4.1论坛
2006/07/07 PHP
PHP函数常用用法小结
2010/02/08 PHP
基于Linux调试工具strace与gdb的常用命令总结
2013/06/03 PHP
php防止sql注入简单分析
2015/03/18 PHP
Yii2框架BootStrap样式的深入理解
2016/11/07 PHP
PHP5.5新特性之yield理解与用法实例分析
2019/01/11 PHP
js日期、星座的级联显示代码
2014/01/23 Javascript
用jquery等比例控制图片宽高的具体实现
2014/01/28 Javascript
js读取csv文件并使用json显示出来
2015/01/09 Javascript
jQuery获取及设置表单input各种类型值的方法小结
2016/05/24 Javascript
js HTML5多图片上传及预览实例解析(不含前端的文件分割)
2016/08/26 Javascript
bootstrap选项卡使用方法解析
2017/01/11 Javascript
Angular实现的内置过滤器orderBy排序与模糊查询功能示例
2017/12/29 Javascript
利用ECharts.js画K线图的方法示例
2018/01/10 Javascript
vue项目实现表单登录页保存账号和密码到cookie功能
2018/08/31 Javascript
详解webpack 热更新优化
2018/09/13 Javascript
Vue唯一可以更改vuex实例中state数据状态的属性对象Mutation的讲解
2019/01/18 Javascript
vue.js实现备忘录demo
2019/06/26 Javascript
跟老齐学Python之赋值,简单也不简单
2014/09/24 Python
Python中pillow知识点学习
2018/04/30 Python
python requests 测试代理ip是否生效
2018/07/25 Python
python 生成图形验证码的方法示例
2018/11/11 Python
python 获取键盘输入,同时有超时的功能示例
2018/11/13 Python
解决Python2.7中IDLE启动没有反应的问题
2018/11/30 Python
用Anaconda安装本地python包的方法及路径问题(图文)
2019/07/16 Python
python 动态迁移solr数据过程解析
2019/09/04 Python
python访问hdfs的操作
2020/06/06 Python
django教程如何自学
2020/07/31 Python
华为慧通面试题
2012/09/11 面试题
大三学生入党思想汇报
2014/01/02 职场文书
团结就是力量演讲稿
2014/05/21 职场文书
政工师工作总结2015
2015/05/26 职场文书
关于观后感的作文
2015/06/18 职场文书
团干部培训班心得体会
2016/01/06 职场文书
2016大学优秀学生干部事迹材料
2016/03/01 职场文书
MySQL如何构建数据表索引
2021/05/13 MySQL