我混淆了使用数组和扩展语法的对象解构。下面的编辑可以递归解包嵌套对象。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 回答
![?](http://img1.sycdn.imooc.com/54584e2c00010a2c02200220-100-100.jpg)
撒科打诨
TA贡献1934条经验 获得超2个赞
你确实误解了破坏的工作原理。如果您有一个对象,则析构允许您创建与对象中的属性同名的新变量。
let obj = {
prop1: 'value1',
prop2: 'value2',
};
let {prop1, prop2, prop3} = obj;
console.log(prop1, prop2, prop3)
![?](http://img1.sycdn.imooc.com/54584d080001566902200220-100-100.jpg)
潇潇雨雨
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])) : 结果, 空);
添加回答
举报
0/150
提交
取消