splice()方法删除二维数组项的问题
来源:互联网 发布:域名绑定ip非80端口 编辑:程序博客网 时间:2024/06/04 23:21
这么一段代码:
var arr = [["a",1],["b",2],["c",3]];for (var i = 0 , len = arr.length; i < len; i++) { if (arr[i][0]==="a" && arr[i][1]===1) { arr.splice(i,1); }}console.log(arr);
运行结果:
问题显示读取不到二维数组里的’0’项。
开始还真没注意这个问题,仔细想想才发现果真有个坑在这埋着:
注意到运用splice方法删除数组的元素时会动态更新数组的长度,也就是说这里执行完删除arr[0]动作后数组长度更新为2,下次循环中即判断arr[1] (注意此时的arr长度为2,arr[1]值为[“c”,3],也就没有实现对[“b”,2]的判断),很明显arr[1]不满足条件,继续进行第三次循环,但此时arr[2]已经超出数组长度了,值为undefined,这里我们还要读取arr[2][0]那自然就读不到了。
如果在一维数组里做判断然后splice删除某元素,不会报错(因为有undefined值),但是同样会省去对某些元素的判断。
这里我们在if判断前加入以下语句也能发现问题:
console.log(arr[i]);
找到原因,解决方法自然就出来了:
第一种方法是见招拆招了:
var arr = [["a",1],["b",2],["c",3]];for (var i = 0 ; i < arr.length;i++) { if (arr[i][0]==="a" && arr[i][1]===1) { arr.splice(i,1); i--; }}
第二种方法可以选择笨点的方法来实现:
var arr = [["a",1],["b",2],["c",3]], res = [];for (var i = 0 , len = arr.length; i < len;i++) { if (arr[i][0]!=="a" || arr[i][1]!==1) { res.push(arr[i]); }}arr = res;
1 0
- splice()方法删除二维数组项的问题
- splice()方法删除数组中不连续的几项
- 利用Array的splice方法,删除数组的元素
- JavaScript splice() 方法 插入 删除或替换数组的元素
- JavaScript splice 方法:插入、删除或替换数组的元素
- Javascript--Array数组的splice()方法之删除、插入、替换
- javascript中使用splice删除数组的问题
- js中使用splice删除数组中某一项或几项的几种方法
- js数组的splice方法
- js数组的splice方法
- javascript 数组的splice方法
- splice 删除数组元素
- 浅谈Javascript--Array数组的splice()方法之删除、插入、替换
- js的数组专有方法splice
- 数组对象的slice和splice方法
- JavaScript的slice()和splice()数组方法
- JavaScript 中数组的 splice() 方法
- js中数组的splice()方法
- 238. Product of Array Except Self
- Git配置 多账户SSH KEY
- hdu 2197
- javaWeb项目下加载dll文件(转载)
- OSI七层协议模型和TCP/IP四层模型比较
- splice()方法删除二维数组项的问题
- 几种算法
- 使程序的cpu占用率呈现正弦曲线
- 请回答!百度钱包,我对你竖中指!更是对自己竖中指!
- Android学习笔记(三)
- OpenGL---绘制几何图形的一些细节
- 指针
- jsoup处理url
- javaScript数组中的方法1