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

如何在JavaScript中动态获取对象所有属性的路径?

JavaScript:动态获取对象所有属性路径的方法

以下是一个可递归遍历对象、动态生成所有属性完整路径的实现,完全适配你需要的输出格式:

function getObjectPaths(obj) {
  const fields = [];
  
  // 递归遍历函数,跟踪当前属性路径
  function traverse(currentObj, currentPath = '') {
    for (const key in currentObj) {
      // 仅处理对象自身属性,避免遍历原型链内容
      if (Object.prototype.hasOwnProperty.call(currentObj, key)) {
        // 拼接当前属性的完整路径
        const newPath = currentPath ? `${currentPath}.${key}` : key;
        const value = currentObj[key];
        
        // 若当前值是嵌套对象(排除null和数组),继续递归遍历
        if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
          traverse(value, newPath);
        } else {
          // 非对象属性,收集路径与对应值
          fields.push({
            fieldId: newPath,
            value: value
          });
        }
      }
    }
  }
  
  traverse(obj);
  return { fields };
}

用法示例

假设输入对象包含country属性(对应你给出的预期结果):

const employeeData = {
  employeeInfo: {
    address1: '2nd street',
    address2: 'eb colony',
    city: 'coimbatore',
    country: {
      countryname: 'india',
      isoalphacode2: 'IN'
    }
  }
};

// 调用函数获取结果
const result = getObjectPaths(employeeData);
console.log(result);

输出结果

{
  fields: [
    { fieldId: 'employeeInfo.address1', value: '2nd street' },
    { fieldId: 'employeeInfo.address2', value: 'eb colony' },
    { fieldId: 'employeeInfo.city', value: 'coimbatore' },
    { fieldId: 'employeeInfo.country.countryname', value: 'india' },
    { fieldId: 'employeeInfo.country.isoalphacode2', value: 'IN' }
  ]
}

关键特性

  • 支持任意层级的嵌套对象,动态解析所有属性路径,无需提前定义对象结构
  • 自动跳过原型链属性,只处理对象自身的属性
  • 目前默认排除null和数组,若需要支持数组路径,可修改判断逻辑,比如将数组元素路径设为parent.key[index]格式

内容的提问来源于stack exchange,提问作者manikandan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 12:25:10