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 相关文章推荐
对象的类型:本地对象(1)
Dec 29 Javascript
多浏览器支持的右下角浮动窗口
Apr 01 Javascript
一个简单的jquery进度条示例
Apr 28 Javascript
angularjs表格分页功能详解
Jan 21 Javascript
AngularJS表单详解及示例代码
Aug 17 Javascript
JQuery实现动态操作表格
Jan 11 Javascript
详解webpack+gulp实现自动构建部署
Jun 29 Javascript
自定义PC微信扫码登录样式写法
Dec 12 Javascript
详解vue引入子组件方法
Feb 12 Javascript
微信二次分享报错invalid signature问题及解决方法
Apr 01 Javascript
vue中beforeRouteLeave实现页面回退不刷新的示例代码
Nov 01 Javascript
JS实现的进制转换,浮点数相加,数字判断操作示例
Nov 09 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
php读取二进制流(C语言结构体struct数据文件)的深入解析
2013/06/13 PHP
php获取本周开始日期和结束日期的方法
2015/03/09 PHP
PHP register_shutdown_function()函数的使用示例
2015/06/23 PHP
基于JQuery的一个简单的鼠标跟随提示效果
2010/09/23 Javascript
jquery ajax实现下拉框三级无刷新联动,且保存保持选中值状态
2013/10/29 Javascript
jquery ajax结合thinkphp的getjson实现跨域的方法
2016/06/06 Javascript
详解vue-cli + webpack 多页面实例配置优化方法
2017/07/13 Javascript
vue实现自定义日期组件功能的实例代码
2018/11/06 Javascript
Python实现并行抓取整站40万条房价数据(可更换抓取城市)
2016/12/14 Python
Python正则表达式分组概念与用法详解
2017/06/24 Python
python 实现批量xls文件转csv文件的方法
2018/10/23 Python
Python3 利用requests 库进行post携带账号密码请求数据的方法
2018/10/26 Python
在pycharm下设置自己的个性模版方法
2019/07/15 Python
OpenCV图片漫画效果的实现示例
2020/08/18 Python
python利用proxybroker构建爬虫免费IP代理池的实现
2021/02/21 Python
基于css3仿造window7的开始菜单
2010/06/17 HTML / CSS
用canvas画心电图的示例代码
2018/09/10 HTML / CSS
利用 Canvas实现绘画一个未闭合的带进度条的圆环
2019/07/26 HTML / CSS
Lacoste美国官网:经典POLO衫品牌
2016/10/12 全球购物
Kaufmann Mercantile官网:家居装饰、配件、户外及更多
2018/09/28 全球购物
全球最大的生存食品、水和装备专用在线市场:BePrepared.com
2020/01/02 全球购物
机电一体化专业应届生求职信
2013/11/27 职场文书
《路旁的橡树》教学反思
2014/04/07 职场文书
项目合作协议书
2014/04/16 职场文书
党的群众路线学习材料
2014/05/16 职场文书
师范生求职自荐信
2014/06/14 职场文书
公共机构节能宣传周活动总结
2014/07/09 职场文书
关于职业道德的心得体会
2016/01/18 职场文书
2016年质量月活动总结报告
2016/04/05 职场文书
神州牡丹园的导游词
2019/11/20 职场文书
python中的被动信息搜集
2021/04/29 Python
python实现三次密码验证的示例
2021/04/29 Python
如何用JS实现简单的数据监听
2021/05/06 Javascript
CSS实现隐藏搜索框功能(动画正反向序列)
2021/07/21 HTML / CSS
vue项目打包后路由错误的解决方法
2022/04/13 Vue.js
PHP 时间处理类Carbon
2022/05/20 PHP