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