objetos objeto multidimensional into elementos array agregar javascript

objeto - ¿Hay alguna razón por la cual los desarrolladores de JavaScript no usan Array.push()?



push array into array javascript (6)

Normalmente veo que los desarrolladores usan una expresión como la siguiente en JavaScript:

arr = [] arr[arr.length] = "Something" arr[arr.length] = "Another thing"

¿No sería más apropiado push ?

arr = [] arr.push("Something") arr.push("Another thing")


Creo que es principalmente un hábito.

Algunos desarrolladores lo usan simplemente porque es la forma en que están acostumbrados a hacerlo, y no han considerado que el push sea ​​una alternativa.

Algunos desarrolladores han aprendido una vez que un método es mucho más rápido que otro y no lo han revisado a la luz de las recientes mejoras de rendimiento de los motores Javascript.

Personalmente uso push frecuencia. La mayoría de las veces, la legibilidad y la capacidad de mantenimiento son más importantes que el rendimiento, al menos cuando el impacto en el rendimiento es lo suficientemente pequeño. Las pruebas de rendimiento publicadas en las respuestas aquí muestran que la diferencia de rendimiento entre varios métodos no es muy grande.


Creo que no se trata de rendimiento, o al menos no es tan importante ... lo que realmente importa aquí es la forma declarativa versus la forma imperativa .


De hecho, me hice la misma pregunta al comienzo de este año. ACTUALIZADO con nuevos casos de prueba http://jsperf.com/array-push-vs-unshift-vs-direct-assignment/2

Parece que el push es mucho más rápido en cromo, y aproximadamente igual en FF. También directo es más rápido en IE9, pero me gustaría ver cómo funciona en IE10.

Yo diría que la mayoría de los desarrolladores supondría establecer la longitud de la matriz, y luego usar la asignación directa es más rápido, como es el caso con la mayoría de los lenguajes de programación. Pero JavaScript es diferente. Los arrays de Javascript no son realmente arrays , solo son mapas de clave / valor al igual que todos los demás objetos de JavaScript. Entonces, la preasignación esencialmente está cayendo en oídos sordos.

Personalmente prefiero push (:


El método Array.prototype.push devuelve la longitud de la matriz actualizada mientras que la declaración directa devuelve el valor que se le está asignando. Esa es la única diferencia que veo, pero normalmente leo algunas recomendaciones de mejores prácticas sobre el método de inserción como una mejor manera de asignar nuevos valores a una matriz.


Es una forma de limitar los braclets anidados. Si tiene suficientes de ellos, no puede ver cuántos hay o cuántos necesita (cuando más tarde mira el código). Usaría una var, uno solo debería contar las cosas una vez.

bar = foo.length; foo[ bar++ ] = "new item 0"; foo[ bar++ ] = "new item 1"; foo[ bar++ ] = "new item 2"; foo[ bar++ ] = "new item 3";

http://jsfiddle.net/vEUU3/


Muy a menudo cuando estoy empujando un objeto en una matriz, quiero que me devuelva la referencia a ese objeto. Por ejemplo:

// Returns object function createAndAdd(arr) { return arr[arr.length] = { id: 1 }; } var obj = createAndAdd(arr);

Ahora tengo el nuevo objeto y lo he agregado a una matriz. Si hubiera utilizado la opción de inserción, me habrían devuelto la longitud de la matriz. Se vería así:

function createAndAdd(arr) { var obj = { id: 1 }; arr.push(obj); return obj; }

o incluso más feo, especialmente si el objeto se pone grande:

function createAndAdd(arr) { return arr[arr.push({ id: 1 }) -1]; }

Personalmente, me encantan las funciones con declaraciones de devolución inmediatas. Lo mantiene simple y fácil de mirar. Me encanta la pregunta. Gracias por preguntarlo.