Convert an array to a list of nested objects - Eloquent Javascript 4.3

后端 未结 2 1040
無奈伤痛
無奈伤痛 2021-01-17 05:24

I am looking at this exercise from the book Eloquent Javascript, Chapter 4 - A List for quite some time and I\'m trying to understand how this particular function works:

相关标签:
2条回答
  • 2021-01-17 05:42

    I've tried to explain a little here. Let me know if something is unclear

    function arrayToList(array) {
      // declare a empty variable to use is as a list
      let list = null;
    
      // Now iterate from the last element to the first. Example [10, 20]
      for (let i = array.length - 1; i >= 0; i--) {
    
        // iteration 1: i = 1 
        // we assign to list...
        list = {
            //the value of the current element
            value: array[i], // value = 20
            // the current list value before current assign
            rest: list // rest = null
        };
        // now it is assigned. list = {value: 20, rest: null}
    
        // ....
    
        // iteration 2: i = 0
        // we assign to list...
        list = {
            //the value of the current element
            value: array[i], // value = 10
            // the current list value before current assign
            rest: list // rest = {value: 20, rest: null}
        };
        // now it is assigned. list = {value: 10, rest: {value: 20, rest: null}}
    
      }
      return list;
    }
    
    0 讨论(0)
  • 2021-01-17 05:48

    TL;DR: In each iteration, we create a new object containing the object from last iteration.

    In the line list = {value: array[i], rest: list};, the statement on the right of the = gets evaluated first. This means we create an object {value: array[i], rest: list}, containing the current values of array[i] and list. In the first iteration, list is null and array[i] is 20, so the object looks like this:

    {value: 20, rest: null}
    

    Only then do we assign this object to list.

    In the next iteration, list isn’t null anymore, but {value: 20, rest: null}. So now, the object we create and assign to list looks like this:

    {value: 10, rest: {value: 20, rest: null}}
    
    0 讨论(0)
提交回复
热议问题