Más específicamente, ¿estoy realmente usando matrices aquí? Nunca declaré el tamaño de la matriz, solo empiezo a agregar números al índice elegido.
Para mí, esto es sospechoso y me hace pensar que JavaScript podría estar usando un mapa hash en lugar de una matriz, lo que implicaría más cómputo.
¿Puedo hacer que JavaScript use una matriz fija sobre una matriz dinámica sobre un hash?
¿Hay alguna forma de verificar la estructura de datos subyacente sin tener que buscar en el código base?
var generate = function(n) { const matrix = [[1], [1, 1]]; // base case : n = 1 if(n === 1) { return [[1]]; } // base case : n = 2 if(n === 2) { return matrix; } // first iterative case : n = 3 // be careful of off by one error here // n is number of rows (3), but i is 0 based (2) for(let i = 2; i < n; i++) { // add empty row matrix[i] = []; for(let j = 0; j <= i; j++) { // if first or last element set to 1 if( j === 0 || j === i ) { matrix[i][j] = 1; } else { matrix[i][j] = matrix[i-1][j-1] + matrix[i-1][j] } } } return matrix; };me hace pensar que JavaScript podría estar usando un mapa hash en lugar de una matriz, lo que implicaría más cómputo.
Sin mirar el código real, esto es cierto. En JavaScript, una matriz es simplemente un objeto simple (es decir, un diccionario) con características adicionales. Los índices son propiedades que representan un número entero no negativo (en un cierto rango). Aunque el motor puede almacenar la matriz como una matriz consecutiva (como es de esperar en los lenguajes de estilo C), el motor es libre de usar realmente una tabla hash como lo haría con cualquier otro objeto. Incluso puede decidir en tiempo de ejecución cambiar de una representación interna a otra (transparente al código).
¿Puedo hacer que JavaScript use una matriz fija sobre una matriz dinámica sobre un hash?
Sí, hay arreglos escritos , como Int16Array