2013-06-16 3 views
5

Ich habe ein jQuery-Objekt obj, das eine Reihe von Eingabeelementen kapselt.

ich diesen Code verwende, um, um ein Array zu machen Wert jedes Elements:

$.map(obj, function(elem, i){ 
    return $(elem).val(); 
}); 

Das Problem ist, dass manchmal einige der Eingabefelder ungültige Werte enthalten, und ich möchte sie in die überspringen Prozess zum Erstellen des Arrays. Doing a simple return false scheint nicht das Element zu überspringen, sondern fügt stattdessen eine false in das Array.

Ich würde gerne wissen, ob es eine Möglichkeit gibt, das ohne mit .each explizit zu tun.

Antwort

11

Da es sich um eine jQuery-Sammlung handelt, können Sie .map direkt ausführen und dann .get verwenden, damit es zu einem Array wird.

var values = obj.map(function(){ 
    return this.value ? this.value : null; 
}).get(); 

Hinweis: Die obige Prüfung wird jeder Wert zurückgeben, der nicht Falsey ist.

Siehe test case on jsFiddle.

+1

Wir könnten es auf diese Weise auch tun 'var myArray = ['eins', 'zwei', 'drei']; var i = myArray.filter (Funktion (en) { return n }); 'Darf ich wissen, ob du' get' benutzt hast? – wuhcwdc

+0

@PankajGarg Wenn Sie ein Array haben, um damit zu beginnen, sicher. In diesem Fall hat das OP eine jQuery-Sammlung und möchte ein Array mit gültigen Werten. Wenn '.map' in Verbindung mit' .get' verwendet wird, wird zuerst unsere jQuery-Sammlung zugeordnet und dann in ein Array konvertiert. Beachten Sie, dass jQuerys '.filter' und' .map' anders arbeiten als die ähnlichen Methoden im nativen 'Array'-Objekt. – mekwall

4

Ich hätte versucht, nichts zurück (void), die den Trick, weiß nicht, warum dies nicht mein Kopf früher kam.

Falls Sie das gleiche tun, hier ist das Update:

$.map(obj, function(elem, i){ 
    if($(elem).val().length == 0) return; 

    return $(elem).val(); 
}); 

EDIT

ich die Länge hier gerade getestet und auf den Validierungscode, um auf dem gleichen bleiben weggelassen Betreff

+0

Das scheint falsch, gibt es einen Unterschied zwischen ** ungültige Werte ** und leer/null? – wuhcwdc

+0

Ich schlage vor, dass 'return;' 'undefined' erhält. Das heißt, dass Ergebnisse nicht definiert sind und nicht speziell "undefiniert" zurückgegeben werden. Dies bewirkt, dass das Element nicht in das Array eingefügt wird. Dies kann ich jedoch ohne Nachforschungen (oder andere Kommentare) nicht belegen. Mozilla State, dass undefined ist _returned_. Am besten, dies nicht zu weit zu verfolgen - ich denke, diese Diskussion hat schon viele Male zuvor stattgefunden;) –

+0

@PankajGarg Ich habe den ganzen Validierungscode absichtlich weggelassen, nur um auf dem Thema zu bleiben ... –

Verwandte Themen