Probablemente me esté perdiendo algo sobre la matriz js.
dada esta matriz:
let a = []agrego dos matrices más
a["b"] = [1,2,3] a["c"] = [4,5,6]¿Por qué su longitud es 0?
a.length 0¿Por qué no puedo por-de?
for (const val of a) { console.log(val)} undefinedpero puedo hacer por la matriz interior
for (const val of a["b"]) { console.log(val)} 1 2 3¿Qué hay de malo en lo que estoy haciendo aquí?
Las matrices generalmente están destinadas a ser solo una colección de valores , que se pueden asociar con un índice numérico (enteros que comienzan con 0).
Las matrices también son objetos, y los objetos pueden tener pares clave-valor arbitrarios asociados con ellos asignándolos a una propiedad del objeto. Por razones similares, puede hacer esto para las funciones:
function foo() { } foo.someProp = 'bar'; console.log(foo.someProp);Pero, en ambos casos, esto es bastante extraño y debe evitarse a menos que esté seguro de lo que está haciendo.
Si desea usar una matriz, asígnela a índices numéricos de la matriz o use push :
const a = []; a.push([1,2,3]); a.push([4,5,6]); console.log(a); console.log(a.length); El uso de for..of en una matriz solo iterará sobre los valores de propiedad de índice de matriz. La b en a["b"] no es un índice de matriz, por lo que no aparece con for..of ...of .
De manera similar, la length de una matriz está determinada por el número de índices de matriz que se han llenado: si existe la propiedad [0] , la longitud será 1, si también existe la propiedad [1] , la longitud será 2, y pronto.
Si necesita claves enteras no numéricas, use un objeto o mapa en su lugar:
const obj = {}; obj.b = [1,2,3] obj.c = [4,5,6] console.log(obj); for (const item of obj.b) { console.log(item); }