es6嵌套解构可一层到位提取多层json值,需结构匹配;支持别名、默认值、数组项解构及可选链防护,递归查找则需额外函数配合。

ES6 嵌套解构能直接从多层 JSON 中“一层到位”取值,不用反复写 obj.a.b.c.d,关键在结构匹配和合理使用语法糖。
基础嵌套对象解构
适用于已知结构、层级固定的数据。用花括号逐级展开,支持别名和默认值:
- 原数据:
{ code: 200, data: { user: { name: '张三', age: 18 } } } - 解构写法:
const { data: { user: { name, age } } } = response; - 若某层可能为空,加默认值:
const { data = {}, user = {} } = response;再解构user
混合数组+对象深度解构
当数据含数组嵌套(如列表中每个项是对象),可用方括号配合对象解构:
详细的 Three.js 3D 图形参考,涵盖场景设置、相机、几何体、材质、光照、动画、控制器、加载器、数学工具和调试。
- 示例:
{ list: [ { id: 1, title: 'A' }, { id: 2, title: 'B' } ] } - 取第一个标题:
const { list: [first] } = data; const { title: firstTitle } = first; - 一行提取多个:
const { list: [{ title: t1 }, { title: t2 }] } = data; - 跳过中间项用逗号占位:
const { list: [, , { title: t3 }] } = data;
安全提取:可选链 + 空值合并 + 解构组合
面对不确定是否存在某层的 JSON(比如后端字段偶尔缺失),纯解构会报错,需前置防护:
- 先用可选链获取深层子对象:
const userObj = response?.data?.user; - 再对非空对象解构:
const { name = '未知', age = 0 } = userObj || {}; - 或合并成一行:
const { name = '未知' } = response?.data?.user || {};
提取所有同名 key 的值(递归场景)
如果结构不固定、需要找遍整个 JSON 中所有 testkey,解构本身不适用,得用递归遍历:
- 写一个扁平提取函数:
function findAllKeys(obj, targetKey, results = []) { if (obj && typeof obj === 'object') { if (targetKey in obj) results.push(obj[targetKey]); Object.values(obj).forEach(val => findAllKeys(val, targetKey, results)); } return results; } - 调用:
const allTestKeys = findAllKeys(data, 'testkey'); - 这不属于解构语法范畴,但常和解构配合使用——先扁平化,再对结果数组解构










