多个解构赋值返回 undefined

我混淆了使用数组和扩展语法的对象解构。下面的编辑可以递归解包嵌套对象。


let nextLevel = Object.values(obj)

return goingDeep(...nextLevel)

以下是最初的问题,如果另一个像我这样的菜鸟遇到这个问题,我会留下它,帮助他们避免被否决;p

尝试以递归方式解构嵌套对象返回未定义。把它放在一边,只是试图将同一个对象解构为不同的变量会返回 undefined。


保持简单,只需假设每层有一个键:值(对象),因此无需迭代。


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}),我已成功将其用于数组,所以很明显我误解了解构对象的基本原理


三国纷争
浏览 332回答 2
2回答

撒科打诨

你确实误解了破坏的工作原理。如果您有一个对象,则析构允许您创建与对象中的属性同名的新变量。let obj = {  prop1: 'value1',  prop2: 'value2',};let {prop1, prop2, prop3} = obj;console.log(prop1, prop2, prop3)

潇潇雨雨

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])) : 结果, 空);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript