JavaScript如何动态获取嵌套对象结构中最深层的data字段值
任意层级嵌套data字段通用提取方案
核心思路是放弃逐层硬编码判断的写法,通过循环遍历持续向下钻取data字段,直到当前节点不存在下一层对象类型的data属性,此时拿到的就是目标最深层业务数据,无需随嵌套层级增加修改代码。
可直接复用的实现
优先选循环实现,无递归栈溢出风险,兼容任意嵌套深度:
/** * 提取接口响应中最深层的data业务数据 * @param {object} response 接口原始返回结果 * @returns {Array} 业务数据数组,对齐原有代码的返回格式 */ function extractDeepestData(response) { // 初始定位到响应最外层的data字段 let currentNode = response.data; // 无有效data时直接返回空数组,和原有逻辑对齐 if (!currentNode || typeof currentNode !== 'object') return []; // 只要当前节点存在对象类型的子data,就继续向下遍历 while ( currentNode.data !== undefined && currentNode.data !== null && typeof currentNode.data === 'object' ) { currentNode = currentNode.data; } // 拷贝后返回,和原有代码的浅拷贝逻辑保持一致 return [...currentNode]; }
原有业务代码替换
直接在请求回调中调用上述工具函数即可,不需要再写多层if分支:
return this.httpWrapperService.get(url + tableNameWithSlash, { params: params, additionalOptions: { spinnerEnabled: false } }).then((result: any) => { return extractDeepestData(result); });
逻辑说明
- 兼容所有嵌套场景:单层data时循环不会执行,直接返回第一层数据;两层、三层甚至更多层data嵌套时,循环会自动走到最内层承载
totalCount等业务字段的节点,和原有硬编码判断的逻辑完全一致 - 增加了类型校验:避免某层
data字段返回字符串、数字等非对象值时出现遍历异常,适配接口可能的边界返回 - 如果偏好更简洁的写法,常规业务场景嵌套层级不深时也可以使用递归版本:
function extractDeepestData(node) { const nextData = node?.data; if (!nextData || typeof nextData !== 'object') { return [...(node.data ?? [])]; } return extractDeepestData(nextData); }
内容的提问来源于stack exchange,提问作者Sasan
相关产品推荐
相关产品推荐

