我有一个像这样的对象(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/