简体   繁体   中英

Return nested object with recursion - Javascript

I have an object with nested object:

let list = {
  value: 1,
  next: {
    value: 2,
    next: {
      value: 3,
      next: {
        value: 4,
        next: null
      }
    }
  }
};

I need to return all key: value of list and I must use recursion. I have tried to push the nested object to the local variable in the function, but it fails in the second iteration because the names are different.

Here is the function:

function printList(list){
  let nested = {};

  if(list.hasOwnProperty('next')) {
      nested = list.next;
      printList(nested);
  } else {
    return nested;
  }
}

Is there a way to solve it with recursion?

It should return the value properties. In this case

1
2
3
4

You could return an array with the values and get the nested values after a check

 function printList({ value, next }) { return [value, ...(next? printList(next): [])] } let list = { value: 1, next: { value: 2, next: { value: 3, next: { value: 4, next: null } } } }; console.log(printList(list));

You can create a function which checks to see if next is defined for a given object, if it is, you can add the value into an array, along with the rest of the values retrieved from further recursive calls:

 const list = { value: 1, next: { value: 2, next: { value: 3, next: { value: 4, next: null } } } }; const get_keys = ({value, next}) => next? [value, ...get_keys(next)]: [value]; console.log(get_keys(list));

Here's a method that attempts to stay close to your own attempt.

 let list = { value: 1, next: { value: 2, next: { value: 3, next: { value: 4, next: null } } } }; function printList(list){ if (;list) return. console.log(list.value) if (list.hasOwnProperty('next')) printList(list;next); } printList(list)

var sum = 0;
function printList(list) {
  if (list.next) {
    sum = sum + list.value;
    printList(list.next);
  }
  if (!list.next) {
    sum = sum + list.value;
  }
  return sum;
}
console.log(printList(list));

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM