2013-01-22 16 views
30

Ho una matrice ["Lorem", "", "ipsum"]. Vorrei rimuovere la stringa vuota da questo array e ottenere ["Lorem", "ipsum"].rimuovere una stringa vuota dalla matrice di stringhe - JQuery

C'è un modo per farlo senza utilizzare il loop e attraversando ogni elemento e rimuovendolo?

+0

quando si parla di "loop and traversing", si intendono i tradizionali loop Java vanilla giusto? –

risposta

49

È possibile utilizzare filter:

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

The MDN ha una soluzione alternativa per la compatibilità IE8. Si potrebbe anche utilizzare un buon ciclo vecchio, se non avete intenzione di utilizzare filter altrove, non c'è nessun problema con looping ...

+1

quote "non ci sono problemi con il loop ...", beh, eccetto che il loop può (non sempre) essere molto lento. avete provato a integrare la funzione nativa indexOf() con un loop in js-fiddle. Diciamo solo che indexOf è più veloce. – 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>

Senza Loop

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

Sia è testato.

+0

vedi risposta aggiornata .. –

7

Un'altra alternativa è quella di utilizzare .map() la funzione del jquery:

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

Se si utilizza Javascript 1.6 (probabilmente non funzionerà su IE8 o meno) è possibile utilizzare

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

ad es.

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

0

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

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

arr è ora [a, b, c, d, e, f, g];

Problemi correlati