2013-01-22 157 views
30

我有一個數組["Lorem", "", "ipsum"]。我想從這個數組中刪除空字符串並獲得["Lorem", "ipsum"]從字符串數組中刪除空字符串 - jQuery

有沒有辦法做到這一點,而不使用循環,遍歷每個元素並將其刪除?

+0

當你提到「循環遍歷」時,你的意思是說傳統的vanilla JavaScript循環正確嗎? –

回答

49

您可以使用filter

var newArray = oldArray.filter(function(v){return v!==''}); 

The MDN對IE8的兼容性解決方法。您還可以使用一個很好的老循環,如果你不打算使用filter其他地方,有一個與循環沒有問題... ...

+1

引用「循環...沒有問題」,好吧,除了循環可以(並不總是)非常慢。你有沒有試圖用js-fiddle中的循環來補充本地indexOf()函數。讓我們只是說indexOf更快。 – macguru2000

6
<script type="text/javascript" src="js/jquery.js"></script> 
<script type="text/javascript"> 

function cleanArray(actual) 
{ 
    var newArray = new Array(); 
    for(var i = 0; i<actual.length; i++) 
    { 
     if (actual[i]) 
     { 
      newArray.push(actual[i]); 
     } 
    } 
    return newArray; 
} 

$(function() 
{ 
    var old = ["Lorem", "", "ipsum"]; 

    var newArr = cleanArray(old); 

    console.log(newArr) 
}); 
</script>

沒有循環

<script type="text/javascript" src="js/jquery.js"></script> 
<script type="text/javascript"> 

$(function() 
{ 
    var arr = ["Lorem", "", "ipsum"]; 

    arr = $.grep(arr,function(n){ 
     return(n); 
    }); 

    console.log(arr) 
}); 
</script>

兩個測試。

+0

查看更新的答案.. –

7

另一種方法是使用jQuery的.map()功能:如果使用(在IE8以下大概不會工作)的JavaScript 1.6

var newArray = $.map(oldArray, function(v){ 
    return v === "" ? null : v; 
}); 
7

可以使用

arr.filter(Boolean) //filters all non-true values

如。

[1, false, "", undefined, null, "Lorem"].filter(Boolean); // [1, "Lorem"]

0

變種ARR = [A,B,C,E,F,G,H];

arr = jQuery.grep(arr,function(n){return(n);});

arr現在是[a,b,c,d,e,f,g];