使用JavaScript转JSON键为首字母大写时数组变序号对象如何修复
问题根源
你的代码没有区分数组和普通对象:在JS中数组的typeof返回值也是object,你给所有输入都统一初始化空对象{}存储结果,数组的数字下标会被当作普通对象的键处理,最终就变成了你看到的带数字序号的对象结构。同时原来的边界逻辑会把非对象类型返回为null,也可能导致基础类型值丢失。
修复后的完整代码
function objEntries(obj) { const keys = Object.keys(obj); const keyValuePairs = keys.map(key => { const value = obj[key]; return [key, value]; }); return keyValuePairs; } function keysToCapitalCase(objToProcess) { // 非对象/数组类型直接返回原值 if (!objToProcess || typeof objToProcess !== "object") return objToProcess; // 优先判断是否为数组,单独处理 if (objToProcess instanceof Array) { // 遍历数组每个元素递归处理,返回新数组 return objToProcess.map(item => keysToCapitalCase(item)); } // 普通对象走原有转换逻辑 const finalObj = {}; objEntries(objToProcess).forEach(function (entry) { const key = entry[0]; let value = entry[1]; // 键首字母大写 const capitalizedKey = key.charAt(0).toUpperCase() + key.slice(1); // 递归处理值 if (typeof value === "object") { value = keysToCapitalCase(value); } finalObj[capitalizedKey] = value; }); return finalObj; }
验证说明
用你提供的输入示例运行修改后的代码,输出结构会完全匹配你给出的预期结果,数组会保留[]格式不会被转成对象。
内容的提问来源于stack exchange,提问作者Lenka
相关产品推荐
相关产品推荐

