Me dan una lista -
let listA = {value: 10, rest: {value: 20, rest: { value: 30, rest: null }}}
Necesito convertirlo en una matriz -
[10, 20, 30]
Utilicé este ciclo for para repasar las claves en la lista
No funcionó. El libro Eloquent JS usa esto para bucle -
let array = []; for (let node = list; node; node = node.rest){ array.push(node.value);
Soy un principiante. Solo he encontrado bucles for simples como:
for(let i=0; i <= array.length; i++)
y versiones similares.
¿Qué está pasando con esta sintaxis de bucle for?
Su "lista" es una lista enlazada. Se modela como objetos anidados recursivamente. Necesita un algoritmo recursivo o realizar un seguimiento de su "pila" actual manualmente al escribir en forma iterativa.
let array = []; for (let node = list; node; node = node.rest) { array.push(node.value); }
Toma el primer objeto, lo inserta en la matriz, luego deja que el objeto actual apunte a node.rest
(el objeto anidado interno) y repite esto hasta que el objeto actual ya no apunte a ninguna parte ( node
es la abreviatura de !!node
: prueba el valor para ser veraz No es del todo correcto, pero puede pensar en él como node != null
).
Si no está acostumbrado a los bucles for no indexados, puede traducirse fácilmente a un bucle while con el mismo comportamiento:
let array = []; let node = list; while (node) { // shorthand for `!!node`: tests the value to be truthy array.push(node.value); node = node.rest; }
El node
variable asume los siguientes valores en orden:
{ value: 10, rest: { value: 20, rest: { value: 30, rest: null } } }
{ value: 20, rest: { value: 30, rest: null } }
{ value: 30, rest: null }
null
Su objeto de entrada es un objeto json anidado con clave de valor y descansa como siguiente objeto.
{value: 10, rest: {value: 20, rest: { value: 30, rest: null }}}
El bucle for que ha puesto está iterando sobre el objeto anidado
En la primera iteración, toma el objeto raíz empujando el valor 10 a la matriz.
En la segunda iteración, toma el valor de lectura del primer objeto anidado 20 y lo empuja a la matriz.
En la tercera iteración, lee el siguiente objeto anidado y empuja el valor 30 a la matriz.