您的位置:首页 > Web前端 > JavaScript

JS操作数组循环删除指定元素,splice(i,1)出错解决方案

2017-04-27 16:38 585 查看
1、首先使用数组splice(i,1)方法

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] 的存在与否。

结束!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  javascript