如何将对象数组中所有键的首字母大写?现有代码未生效
问题解决:对象数组嵌套键首字母大写实现
你的代码存在几个问题,导致无法达到预期效果:
- 使用
key.toUpperCase()会把整个键转为全大写,而非仅首字母大写 - 仅处理了单层对象,没有递归处理嵌套的子对象和数组内的对象
- 未考虑输入为数组的情况,直接传入数组时
_.transform无法正确遍历数组元素
以下是修正后的代码,可递归处理所有层级的对象和数组:
function capitalizeObjectKeys(item) { // 处理数组:遍历每个元素递归处理 if (Array.isArray(item)) { return item.map(element => capitalizeObjectKeys(element)); } // 处理对象:遍历每个键,首字母大写,递归处理值 if (typeof item === 'object' && item !== null) { return _.transform(item, (result, val, key) => { // 首字母大写,其余字符保持原大小写 const capitalizedKey = key.charAt(0).toUpperCase() + key.slice(1); result[capitalizedKey] = capitalizeObjectKeys(val); }); } // 普通值直接返回 return item; }
代码说明:
- 先判断输入是否为数组,若是则遍历每个元素并递归调用处理函数
- 再判断是否为非空对象,通过
_.transform遍历键,将键首字母大写,同时递归处理值,确保嵌套对象和数组都被处理 - 数字、字符串、布尔值等普通类型的值直接返回
用你的示例对象测试该函数,即可得到预期的输出结果。
内容的提问来源于stack exchange,提问作者Tim Launders
相关产品推荐
相关产品推荐

