2010-12-10 9 views
17

Dzielę ciąg znaków na tablicę, a następnie chcę usunąć białą przestrzeń wokół każdego elementu. Używam jQuery. Mogę to zrobić z powodzeniem z 2 tablicami, ale wiem, że to nie jest poprawne. Jak przechodzę przez tablicę i przycinam każdy element, aby elementy zachowały tę zmianę. Dzięki za wszelkie wskazówki. Oto mój działający kod za pomocą dwóch tablic. Pokaż mi prawidłowy sposób wykonania tej czynności.jQuery .each pomoc, chcę przyciąć() wszystkie ciągi w tablicy

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

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

    }); 

Cheers, ~ ck w San Diego

+0

chcesz zrobić to bardziej efektownie, nie deklarując drugiej tablicy? – kobe

+0

tak Chciałbym użyć tylko jednej tablicy, arVeh – Hcabnettek

Odpowiedz

49

Nie potrzebujesz nawet parametrów idx ani val. To wydaje się działać na jsFiddle:

var cleanVehicles = []; 

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

EDIT: Teraz, że widziałem co naprawdę jesteś po, spróbuj użyć mapy:

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

Jeśli spojrzysz trochę bliżej na jego pytanie, on mówi, że już wie, jak to zrobić. On chce wziąć tablicę i po prostu usunąć biały znak bez tworzenia innej tablicy. –

+0

Widziałem to tuż po tym, jak opublikowałem, i zaktualizowałem swoją odpowiedź, aby korzystać z mapy. –

+1

bardzo czyste wdrożenie Chris D, dzięki! – Hcabnettek

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

trimArray(vehicleArray); 

powinno wystarczyć

Albo można korzystać z niektórych niesamowitej sile javascript i używać array.prototype. Nadal jestem trochę nowy w użyciu .prototype dowolnego obiektu ... więc to nie gwarantuje pracy (ale na pewno można to zrobić).

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

someArray.trim() 
+0

@darek, on chce to zrobić z jedną tablicą ??? – kobe

+0

Tak, chce sposobu na łatwe przycięcie wartości tablicy. –

+0

@darek, nie, proszę zobaczyć jego powyższy komentarz, jego kod działa, ale chce zrobić bardziej efektownie, nie mówię, że twój kod jest zły lub tak, na pewno jego ładny kod – kobe

0

Nie można po prostu to zrobić?

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

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

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

}); 
+0

Ale czy nie byłoby to zbyt łatwe i zbyt sensowne? –

8

zamierzam sugerować, nie używając napowietrznej jQuery dla prostej pętli for ...

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

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

Alternatywnie, pozbyć się białych znaków z początku i uniknąć konieczności dla innej pętli.

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

Jak powiedziałem w odpowiedzi @ Jerry'ego - czy nie byłoby to zbyt łatwe i zbyt sensowne? –

+0

To zdecydowanie najlepsza odpowiedź. Ludzie mają zbyt obsesję na punkcie używania jQuery przez cały czas, zapominając, że jQuery jest tak czy inaczej javascript. –

+0

Jestem po prostu ciekawy ... czy masz jakieś liczby dla rzeczywistego kosztu $ .each? Wolę używać $ .each dla zwięzłości składni i jest to dla mnie ważniejsze niż (raczej) "umiarkowany" hit wydajności. –

0

Bez „Tworzenie” tablicy w kodzie JavaScript (tablica będzie jednak zostać stworzony w pamięci)

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

To będzie przyciąć wartość i ustaw go w pozycji indeksowanej.

1

Nie musisz używać JQuery.Oto rozwiązanie waniliowy:

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

rozmowy Function.prototype.call trim() na każdym z elementów testArray. Tak proste jak to!