为了账号安全,请及时绑定邮箱和手机立即绑定

多个解构赋值返回 undefined

多个解构赋值返回 undefined

三国纷争 2021-07-01 10:00:38
我混淆了使用数组和扩展语法的对象解构。下面的编辑可以递归解包嵌套对象。let nextLevel = Object.values(obj)return goingDeep(...nextLevel)以下是最初的问题,如果另一个像我这样的菜鸟遇到这个问题,我会留下它,帮助他们避免被否决;p尝试以递归方式解构嵌套对象返回未定义。把它放在一边,只是试图将同一个对象解构为不同的变量会返回 undefined。保持简单,只需假设每层有一个键:值(对象),因此无需迭代。const container = {container1: {container2 : {container3: {container4: 'core'}}}}暂时将递归放在一边,以下结果只是两个不同的解构赋值......const {level1} = containerconsole.log(level1) // => container1: {container2:{ etcconst {level1_different} = containerconsole.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 回答

?
撒科打诨

TA贡献1934条经验 获得超2个赞

你确实误解了破坏的工作原理。如果您有一个对象,则析构允许您创建与对象中的属性同名的新变量。


let obj = {

  prop1: 'value1',

  prop2: 'value2',

};


let {prop1, prop2, prop3} = obj;

console.log(prop1, prop2, prop3)


查看完整回答
反对 回复 2021-07-15
?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

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])) : 结果, 空);


查看完整回答
反对 回复 2021-07-15
  • 2 回答
  • 0 关注
  • 331 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信