JavaScript中关于for循环删除数组元素内容时出现的问题
昨天用for循环进行数组去重的时候出现的问题,
首先,用双重for循环把前一个和所有后面的元素进行比较,如果相等则删除。
但是,如果数组里面有三个以上连续相等的元素的时候,就会出现问题。
var arr = [1,1,1,2,2]; for(var i=0; i<arr.length-1; i++){ for(var j=i+1; j<arr.length; j++){ if(arr[i] === arr[j]){ arr.splice(j,1); } } } document.write("arr:"+arr);
输出:
这是因为当数组删除一个元素的时候,数组长度减1,后面点元素就会往前移动一位,索引也减1,但是j还是进行了j++的操作。
即第一次进行删除是,i=0 j=1,删除以后arr=[1,1,2,2],然后j=2,就会忽略掉删除以后j=1的元素继续往后遍历。
因此在每次进行了删除的情况下,要对j进行减1
var arr = [1,1,1,2,2]; for(var i=0; i<arr.length-1; i++){ for(var j=i+1; j<arr.length; j++){ if(arr[i] == arr[j]){ arr.splice(j--,1); } } } document.write("arr:"+arr);
输出:
类似关于对数组元素进行删除的,都要考虑数组长度会减1,后面的元素都会往前移动一位
以上所述是小编给大家介绍的JavaScript中关于for循环删除数组元素内容时出现的问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!
相关推荐
-
浅谈JavaScript for循环 闭包
有个网友问了个问题,如下的html,为什么每次输出都是5,而不是点击每个p,就alert出对应的1,2,3,4,5. <html > <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>闭包演示</title> <script type="text/javascript&quo
-
JavaScript 定时器 SetTimeout之定时刷新窗口和关闭窗口(代码超简单)
废话不多说了,直接给大家贴代码了. // 每隔五秒定时刷新当前窗口 setTimeout("self.location.reload();",5000); //js 定时关闭窗口(ie和FF中测试过) //6秒后自动关闭当前窗口 setTimeout("window.opener=null;window.close()",6000); 下面给大家介绍下javascript定时器使用 使用定时器实现JavaScript的延期执行或重复执行 window对象提供了两个方
-
JS for循环中i++ 和 ++i的区别介绍
平时都是这样写的for循环, for(var i = 0; i < 20 ; i++){ .... } 但我看有的人这样写 for (var i = 0; i < 20 ; ++i) { .... } 这样会对for循环有什么影响? 1.在for里好像没啥区别... 但是用在赋值的时候, 就有区别了... var a = 1; var b = a++; var c = 1; var d = ++c; console.log(b,d); // 1, 2 a++ 是先应用a, 然后再自加 ++a
-
JavaScript中setTimeout和setInterval函数的传参及调用
如何向 setTimeout . setInterval 传递参数 看如下代码: var str = 'aaa'; var num = 2; function auto(num){ alert(num); } setTimeout('auto(num)',4000); 这样写是可以正常工作的,但是如其说这是参数传递,还不如说是直接使用的全局变量.所以,这种写法是没有必要的,一般情况下更多的是用到传递局部变量作为参数. 把代码修改一下: //var str = 'aaa'; var num = 2
-
for循环 + setTimeout 结合一些示例(前端面试题)
一.背景 最近在翻看以前的老书<node.js开发指南>,恰好碰到 for 循环 + setTimeout 的经典例子,于是重新梳理了思路并记录下. 二.写在前面,setTimeout 和 setInterval 的执行机制 在日常编码中,你会发现,给 setTimeout 和 setInterval 设定延迟时间往往并不准,或者干脆 setTimeout(function(){xxx},0) 也不是立马执行(特别是有耗时代码在前),这是因为 js 是单线程的,有一个事件队列机制,setTim
-
jQuery的Each比JS原生for循环性能慢很多的原因
其实查看jQuery的源代码,发现each的代码很简单,但为什么性能和原生的for循环相差几十倍呢? jQuery的each的核心代码 for (; i < length; i++) { value = callback.call(obj[i], i, obj[i]); if (value === false) { break; } } 看着很简单,但为什么会慢很多呢? 编写测试代码如下: var length=300000; function GetArr() { var t = []; fo
-
全面解析JavaScript里的循环方法之forEach,for-in,for-of
JavaScript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能. JavaScript诞生已经有20多年了,我们一直使用的用来循环一个数组的方法是这样的: for (var index = 0; index < myArray.length; index++) { console.log(m
-
快速掌握Node.js中setTimeout和setInterval的使用方法
Node.js和js一样也有计时器,超时计时器.间隔计时器.及时计时器,它们以及process.nextTick(callback)函数来实现事件调度.今天先学下setTimeout和setInterval的使用. 一.setTimeout超时计时器(和GCD中的after类似) 在node.js中可以使用node.js内置的setTimeout(callback,delayMillSeconds,[args])方法.当调用setTime()时回调函数会在delayMillSeconds后 执行
-
JavaScript中关于for循环删除数组元素内容时出现的问题
昨天用for循环进行数组去重的时候出现的问题, 首先,用双重for循环把前一个和所有后面的元素进行比较,如果相等则删除. 但是,如果数组里面有三个以上连续相等的元素的时候,就会出现问题. var arr = [1,1,1,2,2]; for(var i=0; i<arr.length-1; i++){ for(var j=i+1; j<arr.length; j++){ if(arr[i] === arr[j]){ arr.splice(j,1); } } } document.write(&
-
JavaScript中利用for循环遍历数组
先看一段代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <script> // 一个普通的数组 var arr =[3,5,2,6]; // 普通的for 循环遍历 for(var i = 0 ; i
-
JavaScript删除数组元素的方法
本文实例讲述了JavaScript删除数组元素的方法.分享给大家供大家参考.具体分析如下: JS中可以通过delete删除数组元素,但是删除后数组的大小不会改变 <script type="text/javascript"> <!-- var days = ["Sunday","Monday","Tuesday","Wednesday", "Thursday",&quo
-
JavaScript 中的六种循环方法
Javascript中的遍历循环 1.for循环 对于数值索引的数组来说,可以使用标准的for循环来遍历值 const arr=[1,2,3,4]; for(let i=0;i<arr.length;i++){ console.log(i); } 2.for...in循环 for...in循环可以用来遍历对象的可枚举属性列表(包括原型链上的属性) const myObject={}; Object.defineProperty(myobject,"a",{ //可枚举 enume
-
Javascript循环删除数组中元素的几种方法示例
本文主要跟大家分享了关于Javascript循环删除数组中元素的几种方法,分享出来供大家参考学习,下面来看看详细的介绍: 发现问题 大家在码代码的过程中,经常会遇到在循环中移除指定元素的需求.按照常规的思路,直接一个for循环,然后在循环里面来个if判断,在判断中删除掉指定元素即可.但是实际情况往往不会像预想的那样顺利运行. 下面以一段Javascript代码为例演示这一过程. (function () { var arr = [1,2,2,3,4,5]; var len = arr.lengt
-
javascript 删除数组元素和清空数组的简单方法
javascript 删除数组元素和清空数组的简单方法 一.清空数组 var ary = [1,2,3,4]; ary.splice(0,ary.length);//清空数组 console.log(ary); // 输出 [],空数组,即被清空了 二.删除数组元素 var ary = [1,2,3,4]; ary.splice(0,1); 或 ary.splice($.inArray(2, ary), 1); 其中$.inArray(2, ary)用来查找某元素在数组中的索引位置. 三,js
-
javascript删除数组元素的七个方法示例
前言 在JavaScript中,除了Object之外,Array类型(数组)恐怕就是最常用的类型了.与其他语言的数组相比,JavaScript中的Array非常灵活.这种灵活性有利有弊,好处是其富有创造性,可以提供各种灵活的解决方案:坏处是容易脑子不够用,因为事实上,它太灵活了,灵活到无法控制的抓狂. 前面调侃了几句,回归正题,这里要总结7个在JavaScript中删除Array元素的方法,分别是利用length属性.delete关键字.pop()栈方法.shift()队列方法.splice()
-
JavaScript按值删除数组元素的方法
本文实例讲述了JavaScript按值删除数组元素的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: function ArrayRemoveByValue(str_value,arr_remove){ var num_to_del =new RegExp(str_value); var db_d =new RegExp('\,{2}'); var se_d =new RegExp('(^\,)|(\,$)'); arr_ret = ar
-
javascript删除数组元素并且数组长度减小的简单实例
实例如下: 复制代码 代码如下: /** * 通过值删除数组元素 * * @param mixed value 元素值 * @returns array */Array.prototype.deleteValue = function(value){ var i = 0; for(i in this){ if(this[i] == value) break; } return this.slice(0, i).concat(this.slice(parseInt(i, 10) + 1));
-
JS删除数组元素的函数介绍
split将字符串转为数组并输出的代码: 复制代码 代码如下: <script language="javascript"> function spli(){ datastr="2,2,3,5,6,6"; var str= new Array(); str=datastr.split(","); for (i=0;i<str.length ;i++ )
随机推荐
- cpan安装Net::SSH::Perl中遇到的一些问题
- JSP生成九九乘法表的简单实例
- Angular.js ng-file-upload结合springMVC的使用教程
- angularJS与bootstrap结合实现动态加载弹出提示内容
- 解决JS外部文件中文注释出现乱码问题
- 利用vbscript脚本修改文件内容,此适用于自动化的操作中
- 基于SpringBoot上传任意文件功能的实现
- JS.findElementById()使用介绍
- 获取今天,昨天,本周,上周,本月,上月时间(实例分享)
- PHP自带ZIP压缩、解压缩类ZipArchiv使用指南
- PHP下常用正则表达式整理
- 被jQuery折腾得半死,揭秘为何jQuery为何在IE/Firefox下均无法使用
- Bootstrap在线电子商务网站实战项目5
- 内存条DDR和DDR2的区别解释
- 十个习惯让你精通新的开发技术
- Android App调用MediaRecorder实现录音功能的实例
- C#实现在控制台输出当前系统时间的方法
- Android开发退出程序的方法汇总
- 中国古今姓氏超过22000个
- JS基于递归实现网页版计算器的方法分析