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 相关文章推荐
Ext第一周 史上最强学习笔记---GridPanel(基础篇)
Dec 29 Javascript
利用WebBrowser彻底解决Web打印问题(包括后台打印)
Jun 22 Javascript
Knockout数组(observable)使用详解示例
Nov 15 Javascript
javascript基本数据类型和转换
Mar 17 Javascript
实现微信小程序的wxml文件和wxss文件在webstrom的支持
Jun 12 Javascript
jQuery Position方法使用和兼容性
Aug 23 jQuery
详解IOS微信上Vue单页面应用JSSDK签名失败解决方案
Nov 14 Javascript
微信小程序实现多选删除列表数据功能示例
Jan 15 Javascript
解决cordova+vue 项目打包成APK应用遇到的问题
May 10 Javascript
JS前端知识点总结之内置对象,日期对象和定时器相关操作
Jul 05 Javascript
Vue开发中常见的套路和技巧总结
Nov 24 Vue.js
详解如何在vue+element-ui的项目中封装dialog组件
Dec 11 Vue.js
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
JS中encodeURIComponent函数用php解码的代码
2012/03/01 PHP
5种PHP创建数组的实例代码分享
2014/01/17 PHP
PHP5.3安装Zend Guard Loader图文教程
2014/09/29 PHP
php版微信数据统计接口用法示例
2016/10/12 PHP
PHP不使用内置函数实现字符串转整型的方法示例
2017/07/03 PHP
PHP时间日期增减操作示例【date strtotime实现加一天、加一月等操作】
2018/12/21 PHP
用JS实现的一个include函数
2007/07/21 Javascript
jquery 循环显示div的示例代码
2013/10/18 Javascript
使用jquery选择器如何获取父级元素、同级元素、子元素
2014/05/14 Javascript
js实现图片放大和拖拽特效代码分享
2015/09/05 Javascript
nodejs初步体验篇
2015/11/23 NodeJs
React Native中导航组件react-navigation跨tab路由处理详解
2017/10/31 Javascript
vue双花括号的使用方法 附练习题
2017/11/07 Javascript
jQuery length 和 size()区别总结
2018/04/26 jQuery
详解JavaScript的BUG和错误
2018/05/07 Javascript
vue计算属性和监听器实例解析
2018/05/10 Javascript
微信小程序wx.navigateTo中events属性实现页面间通信传值,数据同步
2019/07/13 Javascript
Node.js API详解之 Error模块用法实例分析
2020/05/14 Javascript
[00:18]天涯墨客三技能展示
2018/08/25 DOTA
Python实现基于多线程、多用户的FTP服务器与客户端功能完整实例
2017/08/18 Python
wxpython实现图书管理系统
2018/03/12 Python
python实现机器学习之多元线性回归
2018/09/06 Python
Python除法之传统除法、Floor除法及真除法实例详解
2019/05/23 Python
python基于K-means聚类算法的图像分割
2019/10/30 Python
解决安装新版PyQt5、PyQT5-tool后打不开并Designer.exe提示no Qt platform plugin的问题
2020/04/24 Python
Python 求向量的余弦值操作
2021/03/04 Python
html5 跨文档消息传输示例探讨
2013/04/01 HTML / CSS
Shop Apotheke瑞士:您的健康与美容网上商店
2019/10/09 全球购物
Michael Kors英国官网:美国奢侈品品牌
2019/11/13 全球购物
SQL Server笔试题
2012/01/10 面试题
杭州时比特电子有限公司SQL
2013/08/22 面试题
假日旅行社实习自我鉴定
2013/09/24 职场文书
商场拾金不昧表扬信
2014/01/13 职场文书
vue引入Excel表格插件的方法
2021/04/28 Vue.js
SQLServer 错误: 15404,无法获取有关 Windows NT 组/用户 WIN-8IVSNAQS8T7\Administrator 的信息
2021/06/30 SQL Server
在Python 中将类对象序列化为JSON
2022/04/06 Python