腾讯云面试的一道笔试题,目前的思路是 for in 这个对象,如果是数组,再 for 循环拿到数组里的对象的属性名
const camelCasedData = {
age: 18,
gender: "female",
experiences: [
{ from: "2009-09", to: "2013-06", exp: "School" },
{ from: "2013-09", to: "2020-02", exp: "Job" },
]
};
const camelToPascal = input => {
// TODO 转json 然后转大小写
};
const pascalToCamel = input => {
// TODO
};
const pascalCased = camelToPascal(camelCasedData);
console.log(pascalCased);
/* 期望输出:
{
Age: 18,
Gender: "female",
Experiences: [
{ From: "2009-09", To: "2013-06", Exp: "School" },
{ From: "2013-09", To: "2020-02", Exp: "Job" },
]
}
*/
const camelCasedData2 = pascalToCamel(pascalCased);
// 应该和 camelCasedData 一样
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
参考了各位的答案,自己动手做了一下,做个记录。
思路就是判断值的类型是否为数组,如果是数组,那就遍历一下数组,然后给数组的
每个index的每个属性名称(字符串)做一个首字母转换。
如果不是数组,就直接做属性名称的首字母转换。
function toUp(str){
return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase()
}
function toLow(str){
return str.toLowerCase()
}
function mapTo(e) {
const newE = {}
for(key in e){
const topKey = toUp(key)
newE[topKey] = e[key]
if(Array.isArray(e[key])){
const topArrKeyName = toUp(key)
for(let i = 0;i<e[key].length;i++){
const arrObjectKey = e[key][i]
newE[topArrKeyName][i] ={}
for(key2 in arrObjectKey){
const topKey2 = toUp(key2)
newE[topArrKeyName][i][topKey2] = arrObjectKey[key2]
}
}
}
}
return newE
};
代码内容有待优化~,判断递归的地方