概念

数组塌陷:在对数组进行操作的时候,会使数组的长度产生变化,同时,操作的数组那个项的下一个索引会被跳过,从而造成数组的某项会被跳过,这种叫做数组塌陷现象。

例子:

let arr = [1, 2, 3, 3, 3, 3, 3, 3, 3, 4, 5, 6, 7, 8, 9]
for (let i = 0; i < arr.length; i++) {// 判断if (arr[i] === 3) {arr.splice(i, 1); // 此时, 删除的那一项会与原数组下标产生差异, 后面的所有成员都会往前移动。}
}
console.log(arr)

运行结果:

我们原本的目的是循环判断数组中的每一项的值,如果等于3就删除,实际上却发现没有删除干净,原因就是数组塌陷。

具体过程:

遍历到第一个3,索引值 i 是2,执行删除操作,此时数组的长度就从原来的 15 变成了14,索引值还是 2;

再进行循环 i++,这时 i 变成 3,原来数组中的第二个 3 本来的索引值是 3 ,现在索引值变成了 2,这样再去执行 i = 3 的操作,这样就跳过了原来没删除数组中的第二个3,去执行后面的操作,从而造成了输出的结果会有 3 没有被删除感觉,就形成了数组塌陷现象。

解决办法:

i–

就是在对数组某项进行操作之后,手动将索引值 i --,保持数组每一项都被遍历。

let arr = [1, 2, 3, 3, 3, 3, 3, 3, 3, 4, 5, 6, 7, 8, 9]
for (let i = 0; i < arr.length; i++) {// 判断if (arr[i] === 3) {arr.splice(i, 1); // 此时, 删除的那一项会与原数组下标产生差异, 后面的所有成员都会往前移动。i--;  // 有了这条代码 才可以保证与数组中的每一个成员的下标一一对应。}
}
console.log(arr)

运行结果:

数组倒着遍历

let arr = [1, 2, 3, 3, 3, 3, 3, 3, 3, 4, 5, 6, 7, 8, 9]
for (let i = arr.length - 1; i >= 0; i--) {// 判断if (arr[i] === 3) {arr.splice(i, 1); }
}
console.log(arr)

运行结果:

JavaScript 数组塌陷相关推荐

  1. [JavaScript] JavaScript数组挖掘,不只是讲数组哟(2)

    课程来源:后盾人 上一篇的内容:[JavaScript] JavaScript数组挖掘,不只是讲数组哟 数组引用类型分析,多维数组,用Array.of为数组创建细节,类型检测与转换,在一个数组后面加一 ...

  2. 这是如何更好地利用JavaScript数组的方法

    by pacdiv 由pacdiv 这是如何更好地利用JavaScript数组的方法 (Here's how you can make better use of JavaScript arrays) ...

  3. Javascript 数组

    Javascript 数组 Javascript中的Array可以包含任意数据类型,并通过索引来访问每个元素. 要取得Array的长度,直接访问length属性: var arr = [1, 2, 3 ...

  4. JavaScript 数组拼接打印_JavaScript 数组方法

    JavaScript 数组方法 JS 数组 JS 数组排序 JavaScript 数组的力量隐藏在数组方法中. 把数组转换为字符串 JavaScript 方法 toString() 把数组转换为数组值 ...

  5. 如何将JavaScript数组信息导出到csv(在客户端)?

    本文翻译自:How to export JavaScript array info to csv (on client side)? I know there are lot of questions ...

  6. 从JavaScript数组中获取随机项[重复]

    本文翻译自:Get random item from JavaScript array [duplicate] This question already has answers here : 这个问 ...

  7. 创建零填充JavaScript数组的最有效方法?

    在JavaScript中创建任意长度的零填充数组的最有效方法是什么? #1楼 使用对象符号 var x = []; 零填充? 喜欢... var x = [0,0,0,0,0,0]; 充满" ...

  8. 判断javascript数组的方法

    2019独角兽企业重金招聘Python工程师标准>>> 判断javascript数组的方法 var is_array=function(){ return value &&a ...

  9. 深入浅出 JavaScript 数组 v0.5

    有一段时间不更新博客了,今天分享给大家的是一篇关于JS数组的,数组其实比较简单,但是用法非常灵活,在工作学习中应该多学,多用,这样才能领会数组的真谛. 以下知识主要参考<JS 精粹>和&l ...

最新文章

  1. 201521123060 《Java程序设计》第10周学习总结
  2. python爬虫分析大学排名_Python爬虫获得国内高校排名,python,获取,大学排名
  3. Android如何实现TCP和UDP传输
  4. 11.16-18 lsci、ipcs、ipcrm:清除ipc相关信息
  5. python操作微信小程序云端数据库_微信小程序·云开发云数据库的基本使用-微信小程序云开发实例-腾讯云微信小程序...
  6. Ubuntu16.04--code::blocks16.01 的代码拷贝到Windows 8.1--visual studio 2013 注意事项
  7. 无理由退房退机票,做携程超级会员就是这么任性
  8. java单元测试的编写及运行方法
  9. HR人力资源系统软件价格?哪家HR人力管理系统好
  10. 免费客户旅程(Customer Journey Mapping) 示例总汇
  11. 计算机科学 期刊点评,COMPUTER JOURNAL
  12. AutoML 是否被过度炒作?
  13. 阅读《Keyword-Guided Neural Conversational Model》
  14. PE文件格式系列译文之
  15. 关于时隙、RB、RE、PRB等概念的笔记
  16. SSD性能测试工具-AS_SSD Benchmark
  17. Godaddy ssl续费更新问题总结
  18. Android7.1 源码修改之Settings音量调节界面增加通话音量调节
  19. 手机 音乐 推送 到 linux 播放器,很简单地解决了:用手机控制群晖播放音乐并推送到功放的问题...
  20. 重装系统按f几进入u盘启动

热门文章

  1. 高精度减法(C语言实现)
  2. 精神心理科医生:双相抑郁与单相抑郁的鉴别
  3. 10种常见的移动端App广告展现形式
  4. 各大电商平台API数据,包括淘宝天猫的api明细接口
  5. Mysql Unique Key 报错 Duplicate
  6. EV1527射频模块调试一二三
  7. 单片机驱动蜂鸣器(有源和无源)
  8. 安卓rtmp推流app_视频直播app开发只需三步就可完成
  9. fcpx插件:stupid raisins info pop for mac(27个信息和描述标题栏)
  10. python中flatten_Python中flatten( ),matrix.A用法说明