Lo siento si el título no es claro o está mal redactado, soy un codificador bastante nuevo que apesta recordando la terminología correcta. He estado tratando de crear una matriz 3d en Javascript que quiero que se vea así:
var errorCountList = [ [ [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0] ], [ [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0] ], [ [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0] ] ];Sin embargo, quiero que el número de listas [0, 0, 0, 0, 0, 0] en las partes 2d/3d de la lista pueda variar en longitud, si eso tiene algún sentido. Entonces, como resultado, he estado usando una serie de bucles para insertar listas en una matriz 2D antes de insertar estas matrices 2D en otra matriz para hacer una matriz 3D.
for (count3 = 0; count3 < test.length; count3++) { part2.push([0, 0, 0, 0, 0, 0]); } for (count5 = 0; count5 < restrictionValues.length; count5++) { errorCountList.push(part2); } con la prueba y los valores de restricción cambiando las longitudes de la lista. Sin embargo, mientras imprimo la lista usando print(JSON.stringify(errorCountList)); visualmente aparece igual que el errorCountList que configuré, los valores que muestra después de ejecutar el resto de mi código son radicalmente diferentes. ¿Cómo puedo solucionar este problema? Gracias por la ayuda de antemano, esta es la primera vez que publico aquí, lo siento por cualquier problema con la redacción o el formato.
Necesitas anidar los dos bucles for :
test = [1, 2]; restrictionValues = [1, 2, 3]; errorCountList = []; for (count5 = 0; count5 < restrictionValues.length; count5++) { part2 = []; for (count3 = 0; count3 < test.length; count3++) { part2.push([0, 0, 0, 0, 0, 0]); } errorCountList.push([...part2]); } console.log(JSON.stringify(errorCountList)) .as-console-wrapper { max-height: 100% !important; top: 0 }Probablemente esté presionando referencias de una matriz, en lugar de presionar nueve matrices diferentes. Para ahorrar memoria, javascript nunca crea una nueva matriz al reasignar una matriz (y lo mismo ocurre con los objetos u).
Puede ver eso en el registro en el fragmento a continuación: /**ref:2**/,
let part2 = [], errorCountList = [], restrictionValues = Array(3), test = Array(3); for (let count3 = 0; count3 < test.length; count3++) { part2.push([0, 0, 0, 0, 0, 0]); } for (let count5 = 0; count5 < restrictionValues.length; count5++) { errorCountList.push(part2); } console.log(errorCountList) En su lugar, usaría una combinación de Array(n) para crear una matriz vacía y Array.fill(n) para llenar esa matriz vacía con ceros.
let errorCountList = [], restrictionValues = 3, maxLength = 6; const FILLER = 0; const random = (max, min = 1) => { return Math.floor(Math.random() * max + min); }; for (let count5 = 0; count5 < restrictionValues; count5++) { errorCountList.push(Array( random(maxLength) ).fill(FILLER)); } console.log(errorCountList)