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的左右滚动实现代码
Dec 03 Javascript
JavaScript?Apple设备检测示例代码
Nov 15 Javascript
jquery实现类似EasyUI的页面布局可改变左右的宽度
Sep 12 Javascript
js实现点击文本框显示日期选择器特效代码分享
May 21 Javascript
js实现微信分享代码
Oct 11 Javascript
JavaScript实现简洁的俄罗斯方块完整实例
Mar 01 Javascript
jquery动态切换背景图片的简单实现方法
May 14 Javascript
[Bootstrap-插件使用]Jcrop+fileinput组合实现头像上传功能实例代码
Dec 20 Javascript
vue之数据交互实例代码
Jun 20 Javascript
vue封装一个简单的div框选时间的组件的方法
Jan 06 Javascript
javascript 内存模型实例详解
Apr 18 Javascript
关于antd tree 和父子组件之间的传值问题(react 总结)
Jun 02 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
使用gd库实现php服务端图片裁剪和生成缩略图功能分享
2013/12/25 PHP
php 邮件发送问题解决
2014/03/22 PHP
php构造方法中析构方法在继承中的表现
2016/04/12 PHP
PHP进程通信基础之信号
2017/02/19 PHP
asp.net和php的区别点总结
2019/10/10 PHP
Javascript 日期处理之时区问题
2009/10/08 Javascript
使图片旋转的3种解决方案
2013/11/21 Javascript
js实现ArrayList功能附实例代码
2014/10/29 Javascript
jquery中表单 多选框的一种巧妙写法
2015/09/06 Javascript
jquery制作属于自己的select自定义样式
2015/11/23 Javascript
jquery悬浮提示框完整实例
2016/01/13 Javascript
第九章之路径分页标签与徽章组件
2016/04/25 Javascript
深入理解jQuery之事件移除
2016/06/02 Javascript
JS使用正则表达式过滤多个词语并替换为相同长度星号的方法
2016/08/03 Javascript
jQuery生成假加载动画效果
2016/12/01 Javascript
NodeJS遍历文件生产文件列表功能示例
2017/01/22 NodeJs
bootstrap 模态框(modal)实现水平垂直居中显示
2017/01/23 Javascript
js选项卡的制作方法
2017/01/23 Javascript
详解VueJs异步动态加载块
2017/03/09 Javascript
node.js使用redis储存session的方法
2018/09/26 Javascript
JavaScript实现省份城市的三级联动
2020/02/11 Javascript
koa-passport实现本地验证的方法示例
2020/02/20 Javascript
Python 获取新浪微博的最新公共微博实例分享
2014/07/03 Python
分数霸榜! python助你微信跳一跳拿高分
2018/01/08 Python
Python实现获取前100组勾股数的方法示例
2018/05/04 Python
python实现转盘效果 python实现轮盘抽奖游戏
2019/01/22 Python
python3编写ThinkPHP命令执行Getshell的方法
2019/02/26 Python
python和mysql交互操作实例详解【基于pymysql库】
2019/06/04 Python
Python大数据之从网页上爬取数据的方法详解
2019/11/16 Python
浅谈python 中的 type(), dtype(), astype()的区别
2020/04/09 Python
针对HTML5的Web Worker使用攻略
2015/07/12 HTML / CSS
美国Jeep配件购物网站:Morris 4×4 Center
2019/05/01 全球购物
纪律教育学习心得体会
2014/09/02 职场文书
口才训练演讲稿范文
2014/09/16 职场文书
2014幼儿园教育教学工作总结
2014/12/17 职场文书
小学运动会入场口号
2015/12/24 职场文书