function arrayToList(array) {
let list = null;
for (let i = array.length - 1; i >= 0; i--) {
list = {value: array[i], rest: list};
}
return list;
}
// output
console.log(arrayToList([10, 20, 30, 40, 50]));
// → {value: 10, rest: {value: 20, rest: null}}
desde array.value = array[i] y en el bucle, la condición se establece para comenzar desde array.length -1 que es el último índice de la matriz, así que estaba pensando por qué la salida no está invertida. Según tengo entendido, la lista debe comenzar en 50 y decrecer desde allí hasta llegar a 10 .
¿Alguien puede ayudar por qué la condición del ciclo se establece de esta manera y no (i = 0; i < array.length -1; i++) . Gracias.
La primera vez alrededor del bucle crea un objeto:
{
"value": 50,
"rest": null
}
La segunda vez alrededor del ciclo, lo coloca dentro del nuevo objeto que crea.
Y así.
Por lo tanto, "value": 50 es el valor más interno .
Lo que hace su fragmento de código es para cada valor en su matriz, lo tomará y cambiará la list para ser
list = {value: *, rest: null}
Luego repite el proceso otra vez, pero luego llega a la misma instrucción.
En su código, el rest del valor está configurado para ser una list dentro de sí mismo.
Entonces toma el siguiente valor y cambia rest dentro de la list para ser
{value: *, rest: null}
Así que el valor de list se convierte en:
list = {value: *, rest: {value: *, rest: null}
La solución es usar una matriz separada:
const ArrayToList = (Array) => {
List = {Value: null, Rest: RestArray};
RestArray = [];
// Set the first value:
List.Value = Array[0]
// Loop through the rest:
for (let i = 1; i < (Array.length - 1); i++) {
RestArray[i] = Array[i]
}
return List
}
puede hacer esto siguiendo el orden "natural" de su matriz, es solo una cuestión de concisión
function arrayToList(arr)
{
let list = null, listTop = null;
for (let value of arr)
{
if (list===null)
{
list = { value, rest:null }
listTop = list
}
else
{
list.rest = { value, rest:null }
list = list.rest
}
}
return listTop;
}
// output
console.log( arrayToList([10, 20, 30, 40, 50]) )