2013-07-02 3 views
5

powiedzmy Mam tablicę:Jak mogę zwrócić wszystkie poprzednie elementy w tablicy JavaScript niż aktualną wartość?

var myArr = new Array('alpha','beta','gamma','delta'); 

I że chcę funkcja zwraca tablicę wszystkich elementów przed danym punkcie:

function getAllBefore(current) { 
    var myArr = new Array('alpha','beta','gamma','delta'); 
    var newArr = ??? 
    return newArr; 
} 

getAllBefore('beta'); // returns Array('alpha'); 
getAllBefore('delta'); // returns Array('alpha','beta','gamma'); 

Co to najszybszy sposób, aby dostać to? Czy mogę podzielić tablicę na wartość? Czy muszę zapętlać każdy i budować nową tablicę w locie? Co polecasz?

Co jeśli chciałbym czegoś przeciwnego, tj. getAllAfter()?

+2

użytkowania 'indexOf' aby uzyskać pozycję pierwszego elementu, który pasuje do tego, co szukasz. Następnie użyj 'slice' od 0 do tego indeksu – Ian

+1

Użyj' .indexOf() ', aby znaleźć dopasowanie i' .slice() ', aby utworzyć kopię części tablicy. – jfriend00

+0

Nie trzeba wycinać, wystarczy ustawić długość indeksu + 1 (o ile modyfikowanie oryginału jest OK). :-) Ponadto, Array.prototype.indexOf to ES5, więc może potrzebować dodatkowej obsługi starszych przeglądarek. – RobG

Odpowiedz

15
function getAllBefore(current) { 
    var myArr = new Array('alpha','beta','gamma','delta'); 
    var i = myArr.indexOf(current); 
    return i > -1 ? myArr.slice(0, i) : []; 
} 

Uzyskaj indeksu określonego elementu. Jeśli zostanie znaleziony, .slice() od 0 do tego indeksu. Jeśli nie zostanie znaleziony, zwróć pustą tablicę (lub jakąkolwiek inną domyślną wartość, którą lubisz).

.indexOf() Zauważ, że nie jest obsługiwana (dla tablic) w IE8 i starsze, ale nie ma a shim można użyć, lub może po prostu użyć prostego for pętlę zamiast.

+0

Dzięki! Co powinienem zmienić, aby uzyskać 'getAllAfter (current)'? – Ryan

+1

@Ryan 'myArr.slice (i + 1)' – Ian

+1

Wszystko po? 'return i> -1? myArr.slice (i + 1): myArr.slice (0); '- czyli zwraca 1 z indeksu po znalezieniu elementu, w przeciwnym razie zwraca kopię całej tablicy, jeśli nie zostanie znaleziona (lub jakąkolwiek inną domyślną chcesz, gdy nie zostanie znaleziony, możesz użyć 'return i> -1? myArr.slice (i + 1): [];' do domyślnej pustej tablicy). – nnnnnn

1

Zastosowanie indexOf i slice:

newArr = myArr.slice(0, myArr.indexOf(current)); 
+2

jaki jest indeks indeksu zwracania -1? –

+0

@PilgerstorferFranz nie martwi się, po prostu zwróci pustą tablicę. – McGarnagle

+2

@McGarnagle: Nie, zwraca wszystko oprócz ostatniego elementu. – Bergi

0

Spróbuj coś takiego

var index = myArr.indexOf('beta'); 
var before = myArray.slice(0, index); 
Powiązane problemy