2010-12-10 5 views
17

Ich bin eine Aufspaltung einer Zeichenfolge in ein Array, dann möchte ich den weißen Raum um jedes Element entfernen. Ich benutze jQuery. Ich bin in der Lage, dies erfolgreich mit 2 Arrays zu tun, aber ich weiß, dass es nicht korrekt ist. Wie mache ich eine Schleife durch ein Array und trimm jedes Element so, dass die Elemente diese Änderung beibehalten. Danke für irgendwelche Tipps. Hier ist mein Arbeitscode mit zwei Array. Bitte zeigen Sie mir den richtigen Weg, dies zu tun.jQuery .each Hilfe, ich möchte alle Zeichenfolgen in einem Array trimmen()

var arVeh = vehicleText.split("|"); 
    var cleanArry = new Array(); 
    $.each(arVeh, function (idx, val) { 

     cleanArry.push($.trim(this)); 

    }); 

Cheers, ~ ck in San Diego

+0

Sie wollen es effizienter tun, indem Sie nicht die zweite Array deklarieren? – kobe

+0

ja ich möchte nur ein Array verwenden, ArVeh – Hcabnettek

Antwort

49

Sie brauchen nicht einmal die IDX- oder Val-Parameter. Dies scheint auf jsFiddle zu arbeiten:

var cleanVehicles = []; 

$.each(vehicleText.split("|"), function(){ 
    cleanVehicles.push($.trim(this)); 
}); 

EDIT: Nun, da ich gesehen habe, was Sie wirklich nach sind, versuchen Sie Karte mit:

var cleanVehicles = $.map(vehicleText.split("|"), $.trim); 
+0

Wenn Sie näher auf seine Frage schauen, sagt er, er weiß bereits, wie das geht. Er möchte ein Array nehmen und einfach das Leerzeichen entfernen, ohne ein weiteres Array zu erstellen. –

+0

Sah das direkt nachdem ich gepostet habe, und ich habe meine Antwort aktualisiert, um Karte zu verwenden. –

+1

sehr saubere Umsetzung Chris D, danke! – Hcabnettek

0
//a simple function 
function trimArray(dirtyArray){ 
    $.map(dirtyArray.split("|"), function(idx, val){ 
    return $.trim(this); 
    }); 
} 

trimArray(vehicleArray); 

sollte den Trick

tun Oder Sie könnten einige der großartigen Leistung von Javascript und benutzen array.prototype verwenden. Ich bin immer noch ein wenig neu bei der Verwendung der .prototype eines beliebigen Objekts ... so ist dies nicht garantiert funktionieren (aber es kann sicherlich getan werden).

Array.prototype.trim = function(){ 
    $.map(dirtyArray.split("|"), function(idx, val){ 
    return $.trim(this); 
    }); 
} 

someArray.trim() 
+0

@darek, er will es mit einem einzigen Array tun ??? – kobe

+0

Ja, er möchte eine Möglichkeit, die Werte eines Arrays einfach zu trimmen. –

+0

@darek, nein, bitte sehen Sie seinen obigen Kommentar, sein Code funktioniert, aber er möchte effizienter, ich sage nicht, dass Ihr Code schlecht ist oder so, Definitiv seinen netten Code – kobe

0

Könnten Sie nicht nur das tun?

var arVeh = vehicleText.split("|"); 

$.each(arVeh, function (idx, val) { 

    arVeh[idx] = $.trim(this); 

}); 
+0

Aber wäre das nicht zu einfach und zu viel Sinn machen? –

8

Ich werde nicht behaupten, den Overhead von jQuery für eine einfache for-Schleife ...

var arVeh = vehicleText.split("|"); 

for (var i = 0, l = arVeh.length; i < l; ++i) { 
    arVeh[i] = $.trim(arVeh[i]); 
}); 

Alternativ erhalten die Leerzeichen von Anfang an los, und vermeiden die Notwendigkeit für eine andere Schleife überhaupt.

var arVeh = $.trim(vehicleText).split(/\s*\|\s*/); 
+0

Wie ich auf @ Jerrys Antwort gesagt habe - wäre das nicht zu einfach und macht zu viel Sinn? –

+0

Dies ist eindeutig die beste Antwort. Die Leute sind zu besessen davon, jQuery die ganze Zeit zu benutzen, vergessend, dass jQuery sowieso nur Javascript ist. –

+0

Ich bin nur neugierig ... haben Sie irgendwelche Zahlen für den tatsächlichen Overhead eines $ .Each? Ich bevorzuge es, $ .each für die Kürze der Syntax zu verwenden, und das ist mir wichtiger als ein (wahrscheinlicher) "mäßiger" Leistungstreffer. –

0

Ohne 'Creating' eine Anordnung in dem JavaScript-Code (ein Array dennoch im Speicher erzeugt werden)

vehicles = $.map(vehicleText.split("|"), function(e,i) { return $.trim(e) }); 
1
var my_arr = [' cats', 'dogs ', ' what ']; 
$.each(my_arr, function (id, val) { 
    my_arr[id] = $.trim(val); 
}); 
console.log(my_arr); 

Dies wird den Wert trimmen und sie auf die indexierte Ausrüstungsset.

1

Sie müssen JQuery nicht verwenden.Hier ist Ihre Vanille-Lösung:

testArray.map(Function.prototype.call, String.prototype.trim);

Function.prototype.call Anrufe trim() auf jedem der Elemente des testarray. So einfach ist das!