如何在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
相关产品推荐
相关产品推荐

