You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 05:51:16