2010-02-04 13 views
8

Jaki jest najłatwiejszy sposób wstawienia nowego obiektu do tablicy obiektów w pozycji indeksu 0? Bez jQuery; MooTools w porządku; no unshift() ponieważ jest to undefined w IE zgodnie z w3schools.Tablice JavaScript

+0

Prawdopodobnie nadal będziesz otrzymywać odpowiedzi mówiąc "czy próbowałeś jquery?". :) – Alconja

+1

@JamesBrownIsDead, czy próbowałeś jQuery? Naprawdę powinieneś. : P: P –

+3

@CMS jest poprawny: 'unshift' działa na IE: http://jsbin.com/umolo – Kobi

Odpowiedz

29

W3CSchools jest naprawdę przestarzały, metoda unshift jest częścią standardu ECMAScript 3rd Edition który został zatwierdzony i opublikowany jako grudnia 1999.

Nie jest bez powodu, aby tego uniknąć w dzisiejszych czasach, jest obsługiwany z IE 5.5 w górę.

Jest bezpieczny w użyciu, nawet nowoczesne biblioteki, takie jak jQuery lub używają go wewnętrznie (możesz sprawdzić kod źródłowy :).

var array = [2,3]; 
array.unshift(1); // returns 3 
// modifies array to [1, 2, 3] 

Ta metoda zwraca nową długość tablicy i wstawia element przekazany jako argument na pierwszej pozycji tablicy.

+0

-1 Ponieważ OP konkretnie zażądał "no" unshift() '" –

+6

Guys, jest nie ma powodu, aby unikać 'unshift' ... – CMS

+10

Pytający nie określa' unshift', ponieważ w3schools mówi, że nie jest obsługiwany w IE. Jak wskazuje @CMS, jest to nieaktualne: w3schools nie ma nawet * śledzenia udziału w rynku IE <6. –

6

Przy użyciu metody splice.

array.splice(index,howmany,element1,.....,elementX); 

Do wkładania 'howMany' = 0

+1

'unshift' i' concat' są prostsze niż 'splice' dla tego, co chce zrobić @JamesBrownIsDead. –

+0

@ Dominic, bardzo prawdziwe. Sądzę, że jestem po prostu "leniwy", aby zapamiętać różne metody i tylko te bardziej ogólne: P –

+0

Spawanie @okw jest miłe :) –

5

Można spróbować to:

var newItem = 3; 
arr = [newItem].concat(arr); 

Inną opcją jest użycie push i odwrócić indeksy - można łatwo napisać obiekt, który to robi.

0

użyłbym unshift() jeśli zamiarem jest, aby zmodyfikować tablicę, w przeciwnym razie można użyć concat() jak sugeruje Kobi (która zwraca nową tablicę i nie modyfikować zaangażowanych tablic):

var arr = [1, 2], newItem = 3; 
var newArr = [newItem].concat(arr); // newArr = [1, 2, 3], arr still = [1, 2] 

Patrz: concat

Powiązane problemy