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 相关文章推荐
纯JavaScript实现的完美渐变弹出层效果代码
Apr 02 Javascript
教您去掉ie网页加载进度条的方法
Dec 09 Javascript
推荐30个新鲜出炉的精美 jQuery 效果
Mar 26 Javascript
JavaScript+CSS无限极分类效果完整实现方法
Dec 22 Javascript
jQuery animate和CSS3相结合实现缓动追逐效果附源码下载
Apr 18 Javascript
Ionic2系列之使用DeepLinker实现指定页面URL
Nov 21 Javascript
Angular.JS中指令ng-if的注意事项小结
Jun 21 Javascript
webpack构建vue项目的详细教程(配置篇)
Jul 17 Javascript
如何使用 vue + d3 画一棵树
Dec 03 Javascript
回顾Javascript React基础
Jun 15 Javascript
卸载vue2.0并升级vue_cli3.0的实例讲解
Feb 16 Javascript
TypeScript 使用 Tuple Union 声明函数重载
Apr 07 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
仿AS3实现PHP 事件机制实现代码
2011/01/27 PHP
flash用php连接数据库的代码
2011/04/21 PHP
php fsockopen中多线程问题的解决办法[翻译]
2011/11/09 PHP
Zend Studio使用技巧两则
2016/04/01 PHP
PHP时间处理类操作示例
2018/09/05 PHP
JS Array对象入门分析
2008/10/30 Javascript
基于jquery的返回顶部效果(兼容IE6)
2011/01/17 Javascript
jquery 查找iframe父级页面元素的实现代码
2011/08/28 Javascript
JS/FLASH实现复制代码到剪贴板(兼容所有浏览器)
2013/05/27 Javascript
jquery 按钮状态效果 正常、移上、按下
2013/08/12 Javascript
Jqgrid设置全选(选择)及获取选择行的值示例代码
2013/12/28 Javascript
JQuery1.8 判断元素是否绑定事件的方法
2014/07/10 Javascript
javascript连续赋值问题
2015/07/08 Javascript
JavaScript实现添加及删除事件的方法小结
2015/08/04 Javascript
EasyUI Pagination 分页的两种做法小结
2016/07/09 Javascript
多个上传文件用js验证文件的格式和大小的方法(推荐)
2017/03/09 Javascript
详解JavaScript实现动态的轮播图效果
2019/04/29 Javascript
JavaScript基于用户照片姓名生成海报
2020/05/29 Javascript
[56:18]VGJ.S vs Secret 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
使用python统计文件行数示例分享
2014/02/21 Python
Python实现字符串格式化输出的方法详解
2017/09/20 Python
python3大文件解压和基本操作
2017/12/15 Python
Python中如何导入类示例详解
2019/04/17 Python
Python 支持向量机分类器的实现
2020/01/15 Python
Python模拟键盘输入自动登录TGP
2020/11/27 Python
日本面向世界,国际级的免税在线购物商城:DOKODEMO
2017/02/01 全球购物
Miller Harris官网:英国小众香水品牌
2020/09/24 全球购物
Unix控制后台进程都有哪些进程
2016/09/22 面试题
写给妈妈的道歉信
2014/01/11 职场文书
大学生村官演讲稿
2014/04/25 职场文书
2014县政府领导班子对照检查材料思想汇报
2014/09/25 职场文书
证婚人婚礼致辞
2015/07/28 职场文书
基于Python实现一个春节倒计时脚本
2022/01/22 Python
使用 Docker Compose 构建复杂的多容器App
2022/04/30 Servers
Python自动化实战之接口请求的实现
2022/05/30 Python
Java使用HttpClient实现文件下载
2022/08/14 Java/Android