# Stuck on Eloquent Javascript

Hello, apparently I got stuck on Chapter 4.3 A list

Here’s the full working code for reference:

``````function arrayToList(array) {
let list = null;
for (let i = array.length - 1; i >= 0; i--) {
list = {value: array[i], rest: list};
}
return list;
}

function listToArray(list) {
let array = [];
for (let node = list; node; node = node.rest) {
array.push(node.value);
}
return array;
}

function prepend(value, list) {
return {value, rest: list};
}

function nth(list, n) {
if (!list) return undefined;
else if (n == 0) return list.value;
else return nth(list.rest, n - 1);
}

console.log(arrayToList([10, 20]));
// → {value: 10, rest: {value: 20, rest: null}}
console.log(listToArray(arrayToList([10, 20, 30])));
// → [10, 20, 30]
console.log(prepend(10, prepend(20, null)));
// → {value: 10, rest: {value: 20, rest: null}}
console.log(nth(arrayToList([10, 20, 30]), 1));
// → 20
``````

I reviewed the `arrayToList` function, already. I understood it fine.

I’m currently reviewing the `listToArray` function and this is what I’m confused about:

``````(let node = list; node; node = node.rest)
``````

What exactly is going on on this for loop? I don’t understand the condition.

Thanks for the help! I’m coming back on the same thread if I still don’t understand something on the solution, if you don’t mind remember that a loop has three parts:

``````for (<start>; <condition>; <iteration>)  {
<body>
}
``````

the `start` is executed before the loop starts, then the `condition` is checked, if it’s `true` or `truthy` then the `body` of the loop is executed, otherwise the loop stops, after the body the `iteration` happens, and then again the `condition` is checked to evaluate if the loop continues or not

remembering this, can you figure out what the loop is doing?

Oh, yes, I know this, definitely. Perhaps I’ll ask for a clarification, instead?

Because this is how I’m currently reading the loop:

So, the starting point and the condition is:

The iteration part set the node = node.rest

Does that mean the list and list.rest is now stored in the for loop and we are able to push the values of the list to a new array?

I’m very sorry if this was unclear. I’m trying my best to understand it

I will point out that this is a bizarre use of a `for` loop and I would reject this code in a review. This would be better expressed with a `while` loop:

``````let node = list;
while (node) {
array.push(node.value);
node = node.rest;
}
``````

Nothing is ‘stored’ in the `for` loop. The loop is traversing the data structure.

1 Like