多个销毁分配返回未定义

时间:2019-06-25 03:20:10

标签: javascript object destructuring

TLDR编辑:我混淆了带有数组的对象分解和扩展语法。下面的edit会技巧性地递归解压缩嵌套对象。

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

以下是最初的问题,以防万一像我这样的菜鸟碰到这个问题,请帮助他们避免陷入困境; p
尝试解构嵌套对象将递归返回undefined。抛开这些简单地尝试将同一对象分解为不同的变量将返回未定义。

保持简单,只需假设每层有一个key:value(对象)即可,因此无需进行迭代。

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 :(得分:0)

let {nextLevel} = obj

相同
let nextLevel = obj.nextLevel;

我认为您可能会误解破坏的作用。

要递归,您将需要动态搜索所有属性。

const goingDeep = obj => Object.getOwnPropertyNames(obj).reduce(   (属性,结果)=>结果=== null? (obj [prop] ==='core'吗?obj:goingDeep(obj [prop])):结果,null );

答案 1 :(得分:0)

您的确误解了破坏的工作方式。如果有对象,则可以通过销毁来创建与对象中的属性同名的新变量。

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

let {prop1, prop2, prop3} = obj;
console.log(prop1, prop2, prop3)