2013-01-22 19 views
30

Ich habe ein Array ["Lorem", "", "ipsum"]. Ich möchte die leere Zeichenfolge aus diesem Array entfernen und ["Lorem", "ipsum"] erhalten.entfernen Sie eine leere Zeichenfolge aus Array von Zeichenfolgen - JQuery

Gibt es eine Möglichkeit, dies zu tun, ohne die Schleife zu verwenden und jedes Element zu durchlaufen und es zu entfernen?

+0

Wenn Sie "loop und traversing" erwähnen, meinen Sie traditionelle Vanille JavaScript Loops richtig? –

Antwort

49

können Sie filter verwenden:

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

The MDN eine Abhilfe für IE8 Kompatibilität hat. Sie können auch eine gute alte Schleife verwenden, wenn Sie nicht filter sonst überall nicht benutzen wollen, gibt es kein Problem mit Looping ...

+1

Zitat "Es gibt kein Problem mit Schleifen ...", gut, außer dass Schleifen kann (nicht immer) sehr langsam sein. Hast du schon mal versucht, die native indexOf() -Funktion mit einer Schleife in js-fiddle zu ergänzen. Sagen wir einfach, indexOf ist Größen schneller. – 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>

ohne Schlaufe

<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>

Beide getestet.

+0

siehe aktualisierte Antwort .. –

7

Eine weitere Alternative ist die jQuerys .map() Funktion zu verwenden:

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

Wenn Sie Javascript 1.6 (wahrscheinlich nicht funktionieren auf IE8 oder weniger) verwenden Sie

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

zB verwenden können.

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

0

var arr = [a, b, c, e, f, g, h];

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

arr ist jetzt [a, b, c, d, e, f, g];

Verwandte Themen