数组坍塌

数组坍塌

什么是数组坍塌

​ 为了能够更为形象直观地理解什么是“数组坍塌”,我们可以将数组类比为一幢楼房,而数组中的每一个元素类比为楼房的各个楼层。在这样一个模型基础上,我们再来对数组循环遍历的过程进行一个简单的模拟。
​ 当采用for循环对数组进行遍历的时候,为for循环定义的变量i如同楼房模型的楼层号,循环会根据楼层号对对应楼层中的内容进行访问,代码如下:
楼房模拟数组

var arr = [0,1,2,3]
for(var i = 0; i < arr.length; i++){
  	...
}

​ 有些时候,我们会根据需求删除一个或多个不需要的数据,以下程序模拟了用数组循环删除数组中的数据 ‘2’。

var arr = [0,1,2,3]
for(var i = 0; i < arr.length; i++){
  	if(arr[i] == 2){
      console.log(arr);			//打印结果为[0,1,2,3]
      console.log(i);				//打印结果为2
      console.log(arr[i+1]);	//打印结果是2
  		arr.splice(i,1);			//执行数组删除,删除arr[2];
  		console.log(arr);			//打印结果为[0,1,3]
      console.log(i);				//打印结果为2
      console.log(arr[i+1]);	//打印结果是3
  	}
}

​ 根据以上程序的执行结果可以看出,当数组执行了数组删除操作后,数组发生了改变( 由原来的[0,1,2,3]变为了[0,1,3] ),且原本arr[i+1]所对应的数据也发生了改变(由之前的3变成了undefined,因为第4个数据不存在),这一过程我们可以用前文的模型做一个简单的模拟。模拟数组坍塌过程
​ 就如楼房抽离了一层,数组在删除某一个数据后,后面的数组会自动向前补齐空缺,因此之前各个序号所对应的数据都发生了改变,这将对我们的循环遍历造成影响。为了解决这个问题,当对数组中的部分数据进行删除后,我们必须调整当前序号,以保证数组能够继续正常地循环遍历之前没用遍历的数据。

var arr = [0,1,2,3]
for(var i = 0; i < arr.length; i++){
  	if(arr[i] == 2){
      console.log(arr[i+1]);//打印结果是3
  		arr.splice(i,1);			//执行数组删除,删除arr[2];
  		i--;									//调整序号
      console.log(arr);			//打印结果为[0,1,3]
      console.log(i);				//打印结果为1
      console.log(arr[i+1]);//打印结果是3
  	}
}

​ 从以上程序中可以看出,当我们删除了数据 ‘2’ 以后,我们对 i 进行了自减操作,而a[i+1]对应的数值仍旧还是3,这样操作就保证了数组遍历的正确执行。以此类推,当我们减去多个数据的时候,也应当对序号i做相关的自减操作以保证循环的准确。

​ 这是我在逆战班学习的第二个月,我热爱前端,我希望我还能够学到更多。希望我的文章对读者有所帮助,也欢迎大家友善地指出我的不足。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值