javascript - 递归地将对象字段从蛇案例转换为骆驼案例
问题描述
我有一个像这样的对象(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's_.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>
推荐阅读
- sql - 需要帮助 在 Microsoft SQL Server 中分组和创建选择语句
- scala - 尝试使用列表中的条件执行多个 where 时出现“我需要类型的递归值”错误
- python - 添加一系列数字python 2.7
- ssis - SSIS将文件名存储为变量
- php - 将样式表排入 wordpress 的首页
- css - 如何考虑样式化 AngularJS 组件?
- mysql - 使用 JOIN 从 2 个表中选择,并将一个表中的列值与其他表的计数进行比较
- android - Google API 可用性问题
- jquery - Menucool jQuery Slider 的箭头按钮无法正常工作
- npm - “超出最大调用堆栈大小” - npm install react-scripts@latest