js數組如何遍歷一次,刪除部分元素

常常作後臺取數據,渲染到頁面工做的前端童鞋可能都碰到過這種需求:那就是若是後臺傳給前端的數據要二次處理,一個數組,其中具備某種共同特徵的元素是咱們不須要的,必需要把它刪除掉,這時候怎麼作呢。前端

常見的思路是:先用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] 的存在與否。code

我目前測試的這種辦法是沒有漏洞的,若是你們用的時候發現有任何漏洞的話,但願能回覆告知我一下,或者哪位大神有更好的實現這種需求的辦法,麻煩在評論裏寫出來,你們一塊兒探討,共同進步!
深知sf裏大神不少,小弟就不在這裏過多廢話了。console

相關文章
相關標籤/搜索