Estoy codificando una gran cantidad de datos anuales en JavaScript, y estaba considerando agregarlo a las matrices, utilizando el año como el índice de matriz y poner los datos en la matriz. Sin embargo, Firebug parece indicar que JavaScript maneja esto rellenando dos mil entradas impares en la matriz con "indefinido". Con cientos de matrices de este tipo dando vueltas en la memoria activa, me preocupa que la sobrecarga de cientos de miles de elementos inútiles de la matriz podría comenzar a ralentizar el programa. ¿Lo hará?¿Completa JavaScript elementos de matriz vacíos?
Respuesta
Cuando se establece el valor de un índice numérico mayor que la corriente length
de la matriz, la propiedad length
se ve afectada.
En resumen, usted debe utilizar un Object
:
var data = {};
data[year] = "some data";
// or
var data = {
2009: "2009 data",
2010: "2010 data"
};
Ahora responder a la título de la pregunta: "? ¿El JavaScript pueblan elementos de matriz vacíos"
No, como dije antes, sólo la propiedad length
se cambia (si es necesario, solo si el índice agregado es mayor que el length
actual), length
se incrementa para que sea uno más que el valor numérico de ese índice.
Los métodos Array.prototype
funcionan suponiendo que el objeto de matriz tendrá sus índices comenzando desde cero.
Los índices anteriores no existen realmente en el objeto Array
, puede probar que:
var array = [];
array[10] = undefined;
array.hasOwnProperty(10); // true
array.hasOwnProperty(9); // false
En conclusión, las matrices están destinados a contener índices secuenciales, a partir de cero, si sus propiedades no lo hacen cumple con esos requisitos, simplemente debes usar un objeto.
Gracias - esto realmente ayudó a aclarar cómo funcionan las matrices. Cambié a los literales de objeto. – futuraprime
Sí, muy probablemente. Usted debe considerar el uso de un objeto de JavaScript en su lugar:
var years = {2009: 'Good', 2010: 'Better'};
¿Por qué usar cadenas durante años? –
@apphacker: Tienes razón, lo he cambiado. –
No importa, como claves son equivalentes. Es solo una cuestión de gusto. –
Bueno, si itera sobre muchos miles de indefinidos, afectará la velocidad general del programa, aunque no está seguro si lo notará.
Usted * podría *: 1024 nodos vacíos tarda aproximadamente 2ms en FF 3.5.6 –
Por otro lado, a veces una matriz dispersa es más fácil de usar que un objeto personalizado, y las matrices tienen estos prácticos métodos disponibles.
En una aplicación de calendario comienzo con objetos para cada año en uso, pero cada año consta de doce miembros (matriz de meses) y cada 'mes' es una matriz dispersa de fechas significativas, cuya longitud depende de la fecha más alta de ese mes que tiene datos.
- 1. Elementos vacíos en matriz de bytes C#
- 2. Zend_Form notación de matriz y los elementos vacíos nombres
- 3. HTML5 elementos vacíos
- 4. jaxb marshalling omitir elementos vacíos
- 5. ¿Separación de cadena por espacio en blanco, sin elementos vacíos?
- 6. Javascript Matriz: get 'rango' de elementos
- 7. eliminación de elementos vacíos finales en Python
- 8. Restricción de elementos vacíos en xsd
- 9. PHP matriz - Extracción de valores vacíos
- 10. Deserializar Xml con elementos vacíos en C#
- 11. Eliminar elementos de matriz vacíos con array_filter con una función de devolución de llamada
- 12. Eliminación recursiva de elementos vacíos y subcampos de una matriz multidimensional
- 13. Comprobando si todos los elementos de la matriz están vacíos PHP
- 14. completa justificar los elementos li
- 15. ¿Cómo puedo unirme a una matriz de cadenas pero primero eliminar los elementos de la matriz que están vacíos?
- 16. Extracción de elementos vacíos de un vector de cadenas
- 17. Filtrar elementos en matriz de JavaScript usando jQuery
- 18. ¿Cómo JSON decodifica elementos de matriz en JavaScript?
- 19. ¿Cómo eliminar elementos de una matriz en JavaScript?
- 20. ¿Cómo extraigo elementos uniformes de una matriz?
- 21. ¿Eliminar todos los elementos vacíos de un hash/YAML?
- 22. XSLT: ¿Cómo excluir elementos vacíos de mi resultado?
- 23. Como llegar elementos aleatorios de una matriz
- 24. Javascript: presione una lista completa?
- 25. Google Charts Mostrar elementos vacíos en la leyenda
- 26. ¿Cómo verificar si los elementos del formulario no están vacíos?
- 27. ¿Cómo elimino los elementos vacíos del dominio usando jQuery?
- 28. Algoritmo de Javascript para encontrar elementos en la matriz que no están en otra matriz
- 29. ¿Aleatorizar elementos en una matriz?
- 30. Obtención de elementos de matriz con valueForKeyPath
Pregunta relacionada: http://stackoverflow.com/questions/1247116/which-takes-less-memory-a-javascript-array-or-javascript-object –