我想把我的对象数组的所有键都转换为Typescript中的camelCase。我有以下数据:
[
{
"Name":"Custom property",
"Details":{
"Address":"Huston",
"Price":"1000000",
},
"Contact":{
"Global":"3432432",
"Local":"432423423"
},
},
{
"Name":"Myproperty",
"Details":{
"Address":"Huston",
"Price":"10000001",
},
"Contact":{
"Global":"34324323",
"Local":"4324234233"
},
},
]
我已经尝试了下面的代码,但它返回一个新的字典只有细节。我该怎么解决呢?
const newObjOptions = options.map((obj: any) =>
Object.fromEntries(
Object.entries(obj).map(([k, v]) => [_.camelCase(k), v])
)
);
const newObjDetailsOptions = newObjOptions.map((obj: any) =>
Object.fromEntries(
Object.entries(obj.details).map(([k, v]) => [_.camelCase(k), v])
)
);
2条答案
按热度按时间w8ntj3qf1#
如果同时记录
newObjOptions
和newObjDetailsOptions
,您的实现可以正常工作,您将看到键的顶层确实是 Camel 大小写。主要问题是代码没有检查对象是否包含任何其他对象。
要修改你的代码来做到这一点,你可以这样做:
这在你的例子中是可行的,但是如果你的对象包含一个数组(试试看),它就会中断。这可以用一个简单的递归函数很好地解决,这里有一个可能看起来像什么的想法:
3ks5zfa02#
虽然kill提供的答案被接受,但当我试图在内部使用它时,有两个缺点。
1.不是一般的。
1.它不能处理
null
值(如果嵌套数组包含任何空值,则会导致永不返回的函数)让我们编写一个泛型函数,它也可以处理
null
值:现在让我们使用
objectify
实现camelCase:要使用此函数,只需将您的对象传入其中:import camelify from './camelify'