Несколько заданий на деструктуризацию возвращают неопределенное - PullRequest
0 голосов
/ 25 июня 2019

TLDR Edit: я путал деструктуризацию объектов с массивами и распространял синтаксис. При редактировании ниже делается рекурсивная распаковка вложенного объекта.

let nextLevel = Object.values(obj)
return goingDeep(...nextLevel)

Ниже приведен оригинальный вопрос, который я оставлю на тот случай, если другой нуб, такой как я, столкнется с этим, помогите спасти их от отрицательных голосов; p
Попытка деструктурировать вложенный объект рекурсивно возвращает неопределенное. Оставляя это в стороне, просто пытаясь разложить один и тот же объект на разные переменные, вы получите неопределенное значение.

Сохраняя простоту, просто предполагая один ключ: значение (объект) на слой, поэтому не нужно повторять.

const container = {container1: {container2 : {container3: {container4: 'core'}}}}

Отложив на данный момент рекурсию следующих результатов, просто используя два разных задания по деструктуризации ...

const {level1} = container
console.log(level1) // => container1: {container2:{ etc
const {level1_different} = container
console.log(level1_different) // => undefined

это то, что я пытался с помощью рекурсии

const goingDeep = (obj) => {
    if (obj.hasOwnProperty('container4')){
        obj.container4 = 'found'
        return obj
    } else {
       // let {nextLevel} = obj        /no good
       // return goingDeep(nextLevel)  /no good
       let nextLevel = Object.values(obj)
       return goingDeep(...nextLevel)
    }
}
У

изначально была деструктура с параметром goingDeep = ({obj}), который я успешно использовал для массивов, так что я совершенно не понимаю, что-то, что является фундаментальным для деструктурирования объектов

Ответы [ 2 ]

0 голосов
/ 25 июня 2019

Вы, действительно, неправильно понимаете, как работает разрушение.Если у вас есть объект, уничтожение позволяет создавать новые переменные с теми же именами, что и у свойств объекта.

let obj = {
  prop1: 'value1',
  prop2: 'value2',
};

let {prop1, prop2, prop3} = obj;
console.log(prop1, prop2, prop3)
0 голосов
/ 25 июня 2019
let {nextLevel} = obj

Это то же самое, что и

let nextLevel = obj.nextLevel;

Я думаю, вы, возможно, неправильно понимаете, что делает деструктор.

Чтобы быть рекурсивным, вам нужно будет динамически искать все свойства.

const goingDeep = obj => Object.getOwnPropertyNames (obj) .reduce ((prop, result) => result === null? (Obj [prop] === 'core'? Obj: goingDeep (obj [prop]])): результат, ноль);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...