JS操作数组循环删除指定元素,splice(i,1)出错解决方案
2017-04-27 16:38
585 查看
1、首先使用数组splice(i,1)方法
2、也可以添加到array原型中
3、但是如果循环遍历删除就会有问题,像这样:
那么,如何解决呢?真是难为我了
后来的后来在网上找到这个,看吧,我多厉害。拉线
经常做后台取数据,渲染到页面工作的前端童鞋可能都碰到过这种需求:那就是如果后台传给前端的数据要二次处理,一个数组,其中具有某种共同特征的元素是我们不需要的,必须要把它删除掉,这时候怎么做呢。
常见的思路是:先用map方法遍历一次,或其它方法遍历,总之是把要去掉的元素改成undefined,然后再遍历新数组,把undefined的元素去掉。总之就是非常麻烦。
那么有没有遍历一次就可以把没用的元素去掉的办法呢?
有的,如下:
只需要一个简单的for循环就搞定啦。
我在for循环里设了个 flag 标志,并在后面的 i++ 位置做了判断,flag为true则加,为false则不变。
这样就可以解决,splice方法删掉一个元素后,后面紧邻的元素不会被遍历到的问题。
特别注意,for循环里面的 if 要先判断一下 arr[i] 的存在与否。
结束!
function removeByValue(arr, val) { for(var i=0; i<arr.length; i++) { if(arr[i] == val) { arr.splice(i, 1); break; } } } var somearray = ["mon", "tue", "wed", "thur"] removeByValue(somearray, "tue"); //somearray will now have "mon", "wed", "thur"
2、也可以添加到array原型中
Array.prototype.removeByValue = function(val) { for(var i=0; i<this.length; i++) { if(this[i] == val) { this.splice(i, 1); break; } } } var somearray = ["mon", "tue", "wed", "thur"] somearray.removeByValue("tue"); //somearray will now have "mon", "wed", "thur"
3、但是如果循环遍历删除就会有问题,像这样:
var array = [{"step":1},{"step":2},{"step":0},{"step":1},{"step":3},{"step":4}]; for(var i=0;i<array.length;i++){ if(array[i].step > 2){//删除step>2的项 array.splice(i, 1); } }
那么,如何解决呢?真是难为我了
后来的后来在网上找到这个,看吧,我多厉害。拉线
经常做后台取数据,渲染到页面工作的前端童鞋可能都碰到过这种需求:那就是如果后台传给前端的数据要二次处理,一个数组,其中具有某种共同特征的元素是我们不需要的,必须要把它删除掉,这时候怎么做呢。
常见的思路是:先用map方法遍历一次,或其它方法遍历,总之是把要去掉的元素改成undefined,然后再遍历新数组,把undefined的元素去掉。总之就是非常麻烦。
那么有没有遍历一次就可以把没用的元素去掉的办法呢?
有的,如下:
var arr = [ { status:0 },{ status:1 },{ status:0 },{ status:0 },{ status:0 },{ status:3 },{ status:0 },{ status:7 },{ status:0 },{ status:2 }]; console.log(arr); for(var i=0,flag=true,len=arr.length;i<len;flag ? i++ : i){ if( arr[i]&&arr[i].status==0 ){ arr.splice(i,1); flag = false; } else { flag = true; } } console.log(arr);
只需要一个简单的for循环就搞定啦。
我在for循环里设了个 flag 标志,并在后面的 i++ 位置做了判断,flag为true则加,为false则不变。
这样就可以解决,splice方法删掉一个元素后,后面紧邻的元素不会被遍历到的问题。
特别注意,for循环里面的 if 要先判断一下 arr[i] 的存在与否。
结束!
相关文章推荐
- JS实现根据指定值删除数组中的元素操作示例
- JS对数组某个元素的删除操作,delete与splice的异同
- Js数组里删除指定的元素(不是指定的位置)
- JS根据指定值删除数组中的元素
- Js数组里删除指定的元素(不是指定的位置)
- js删除Array数组中指定元素
- js删除数组中的指定元素
- js从数组中删除指定值(不是指定位置)的元素实现代码
- js删除Array数组中指定元素的两种方法
- JS删除数组指定元素
- js从数组中删除指定值(不是指定位置)的元素
- js删除数组中的元素delete和splice的区别
- js数组的删除元素------jquery easyui tab组件未提供删除元素方法的解决方案
- js删除数组指定的某个元素
- js 操作数组函数 (查找、删除 js中指定的数组元素)
- JS中如何删除数组中的指定元素
- [Js]删除数组指定元素
- js中数组插入、删除元素操作
- js删除数组里指定的元素
- js 给json添加新的字段,或者添加一组数据,在JS数组指定位置删除、插入、替换元素