javascript - 将对象字段从蛇形命名法递归转换为驼峰命名法

标签 javascript object recursion lodash

我有一个像这样的对象(snake_case中的字段)

const obj = {
  vt_core_random: {
    user_details: {
      first_name: "xyz",
      last_name: "abc",
      groups: [
        {
          id: 1,
          group_type: "EXT"
        },
        {
          id: 2,
          group_type: "INT"
        }
      ],
      address_type: {
        city_name: "nashik",
        state: {
          code_name: "MH",
          name: "Maharashtra"
        }
      }
    }
  }
};

我想递归地将其字段转换为camelCase,因此预期输出如下

const obj = {
  vtCoreRandom: {
    userDetails: {
      firstName: "xyz",
      lastName: "abc",
      groups: [
        {
          id: 1,
          groupType: "EXT"
        },
        {
          id: 2,
          groupType: "INT"
        }
      ],
      addressType: {
        cityName: "LMN",
        state: {
          codeName: "KOP",
          name: "PSQ"
        }
      }
    }
  }
};

我尝试使用mapKeys(),但我无法理解其中的递归部分。非常感谢任何帮助。另外,我还可以使用 lodash(如果它能让过程更简单的话)

最佳答案

您可以使用lodash的_.transform()创建一个递归函数,迭代键并将它们转换为驼峰式大小写 _.camelCase() 。 Transform 还可以处理数组,因此如果迭代对象(target) 是数组,我们不需要更改键。

const camelize = obj => _.transform(obj, (acc, value, key, target) => {
  const camelKey = _.isArray(target) ? key : _.camelCase(key);
  
  acc[camelKey] = _.isObject(value) ? camelize(value) : value;
});

const obj = {"vt_core_random":{"user_details":{"first_name":"xyz","last_name":"abc","groups":[{"id":1,"group_type":"EXT"},{"id":2,"group_type":"INT"}],"address_type":{"city_name":"nashik","state":{"code_name":"MH","name":"Maharashtra"}}}}};

const result = camelize(obj);

console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.js"></script>

关于javascript - 将对象字段从蛇形命名法递归转换为驼峰命名法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59769649/

相关文章:

javascript - 从数组元素设置 img 标签的 src 属性

javascript - 如何将div高度设置为前两行

java - 在Processing中编写一个小型库

javascript - 在数组中查找对象而不是循环的更好方法?

java - 返回空值的递归方法

javascript - 从外部类获取 CSS

javascript - IE11 + Vue-Cli + Webpack + Babel - SCRIPT1003 错误

powershell - 检查 PowerShell 对象是否存在的最佳方法?

C++ 递归错误

c - 如何递归打印结构数组?