Вернуть вложенный объект с рекурсией - Javascript - PullRequest
1 голос
/ 26 сентября 2019

У меня есть объект с вложенным объектом:

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

Мне нужно вернуть все key: value из list, и я должен использовать рекурсию.Я пытался вставить вложенный объект в локальную переменную в функции, но во второй итерации это не удалось, потому что имена разные.

Вот функция:

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

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

IsЕсть ли способ решить это с помощью рекурсии?

Он должен вернуть свойства value.В этом случае

1
2
3
4

Ответы [ 3 ]

3 голосов
/ 26 сентября 2019

Вы можете создать функцию, которая проверяет, определено ли next для данного объекта, если это так, вы можете добавить value в массив вместе с остальными значениями, полученными из дальнейших рекурсивных вызовов.:

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));
2 голосов
/ 26 сентября 2019

Вы можете вернуть массив со значениями и получить вложенные значения после проверки

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));
1 голос
/ 26 сентября 2019

Вот метод, который пытается оставаться рядом с вашей собственной попыткой.

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...