You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 21:48:01