2010-02-04 626 views
8

¿Cuál es la forma más fácil de insertar un nuevo objeto en una matriz de objetos en la posición de índice 0? No jQuery; MooTools está bien; no unshift() porque es undefined en IE según w3schools.Conjuntos de JavaScript

+0

Probablemente recibirás respuestas diciendo "¿has probado jquery?". :) – Alconja

+1

@JamesBrownIsDead, ¿Has probado jQuery? Tu realmente deberías. : P: P –

+3

@CMS es correcto: 'unshift' funciona en IE: http://jsbin.com/umolo – Kobi

Respuesta

29

W3CSchools es muy anticuado, el método unshift es parte de la norma ECMAScript 3rd Edition que fue aprobada y publicada en diciembre de 1999.

Hay es sin razón para evitarlo hoy en día, es compatible con IE 5.5.

Es seguro usarlo, incluso las bibliotecas modernas como jQuery o MooTools lo usan internamente (puede verificar el código fuente :).

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

Este método devuelve la nueva longitud de la matriz, e inserta el elemento pasado como argumento en la primera posición de la matriz.

+0

-1 Porque el OP específicamente solicitó "no' unshift() '" –

+6

Chicos, hay no hay razón para evitar 'unshift' ... – CMS

+10

El interlocutor no especifica' unshift' porque w3schools dice que no está soportado en IE. Como @CMS señala, eso está desactualizado: w3schools ni siquiera * rastrea * IE <6 market share. –

6

Usando el método splice.

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

Para insertar, 'howmany' = 0

+1

'unshift' y' concat' son más simples que 'splice' para lo que @JamesBrownIsDead quiere hacer. –

+0

@Dominic, muy cierto de hecho. Supongo que solo soy 'flojo' para recordar diferentes métodos y solo los más genéricos: P –

+0

@okw splice es bueno :) –

5

Puede probar esto:

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

Otra opción es utilizar push y revertir los índices - se puede escribir fácilmente un objeto que hace eso.

0

usaría unshift() si su intención es la de modificar la matriz, de lo contrario se puede utilizar concat() como se sugiere Kobi (que devuelve una nueva matriz y no modifica las matrices involucradas):

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

Ver: concat

Cuestiones relacionadas