优化 JavaScript 代码以小写 JSON 属性名称

2024-02-05

我正在开发一个 Web 应用程序,该应用程序接收具有大写属性名称的 JSON 数据。我需要这些属性名称为小写,因此我使用一个函数递归地循环遍历 JSON 对象并将它们转换为小写。

问题是我的 JSON 回复可能会变得非常大。我希望该函数能够表现良好,即使它必须处理具有 60,000 个属性名称和各种嵌套级别的 JSON。

小写函数是:

FN = function (obj)
{var ret = null;
    if (typeof(obj) == "string" || typeof(obj) == "number")
        return obj;
    else if (obj.push)
        ret = [];
    else
        ret = {};
    for (var key in obj)
        ret[String(key).toLowerCase()] = FN(obj[key]);
    return ret;
};

我在这里进行一些基准测试:http://jsfiddle.net/emw89/7/ http://jsfiddle.net/emw89/7/

上述测试在我的机器上的运行时间约为 570 毫秒。

我可以做些什么来提高这个功能的性能吗?

编辑:我关闭了 IE,重新打开 IE 并再次运行 jsfiddle 基准测试 - 现在对我来说大约为 180 毫秒。直到那时我的 IE 已经打开了几天,所以也许这就是导致性能如此糟糕的原因。不管怎样,我仍然感兴趣是否有办法进一步优化这个功能。处理 JSON 所花费的任何额外时间都会直接增加每个 AJAX 请求的消耗时间。


var lowerCache = {};

FN = function (obj)
{
    if (typeof(obj) === "string" || typeof(obj) === "number")
        return obj;

        var l = obj.length;
    if (l) {
        l |= 0;
        var result = [];
        result.length = l;
        for (var i = 0; i < l; i++) {
            var newVal = obj[i];
            result[i] = typeof(newVal) === "string" ? newVal : FN(newVal);
        }
        return result;
    } else {
     var ret = {};
     for (var key in obj) {

         var keyStr = typeof(key) === "string" ? key : String(key);
         var newKey = lowerCache[keyStr];
         if (newKey === undefined) {
             newKey = keyStr.toLowerCase();
             lowerCache[keyStr] = newKey;
         }

         var newVal = obj[key];
         ret[newKey] = typeof(newVal) === "string" ? newVal : FN(newVal);
     }
     return ret;
    }
};

快 100%。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

优化 JavaScript 代码以小写 JSON 属性名称 的相关文章

随机推荐

  • 是否有用于生成 MOBI 电子书文档的 Java 或 Ruby 库? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 Calibre 项目中有一个用于此目的的 Python 库 但我想找到一个可以从 Clojure 或 Ruby 使用的库 有任何想法吗 查
  • 生成图像并将其与其他内容一起显示在 JSP 中

    我正在使用 JFreeChart 根据用户输入生成动态图表 我有一个带有一些文本框和组合框的 JSP 用户输入并提交它 操作处理它 生成图表图像 我需要在文本框 组合框下方的同一个 JSP 上显示此图像 如果我使用response setC
  • 构建 VITE 应用程序时如何分配自定义 CSS 文件名?

    是否可以在VITE中构建并使用application name css or my site name css VITE 可以选择构建自定义 JS 文件 但不能构建自定义 CSS 或 SCSS 文件 用于导出 https vitejs de
  • 如何在 XCassets 中使用立方体纹理类型

    我正在尝试学习 SceneKit 开发并尝试在后台添加天空盒 为了存储立方体贴图纹理 我发现 XCAssets 有一个类型立方体纹理集 https developer apple com library archive documentat
  • 单向 SSL 是单向加密吗?

    如果使用 SSL 的一种方式 服务器证书身份验证 则从客户端发送的数据将使用服务器证书的公钥进行加密 因此客户端发送的数据可以得到隐私保护 我的问题是 这是否意味着从服务器发送到客户端的一种方式 SSL 数据未加密并以纯文本形式发送 对于服
  • JSF 中的线程?

    我是 JSF 新手 我需要使用 Threads 来处理 google 地图 我正在使用 primefaces 进行谷歌地图 但我需要在后台执行一个线程以从数据库获取纬度和经度 然后在地图中绘制标记 您的问题并非特定于 JSF 而是针对一般的
  • Facebook 页面插件无法正常工作

    我需要一个嵌入式 Facebook 页面插件 但是facebook的代码生成器不起作用 当我给出 facebook 页面的 url 时 生成器不会给出该页面的代码 预览模式下也不会出现该页面 脸书页面是 https www facebook
  • PE格式,IAT目录有什么用

    在 PE 格式中 我们有导入表目录 通过IMAGE DIRECTORY ENTRY IMPORT 和 IAT 目录 通过以下方式访问 IMAGE DIRECTORY ENTRY IAT 两者都是可选标头数据目录的一部分 使用导入表 加载器动
  • memcpy 溢出边界利用? (破坏堆栈)

    我试图弄清楚这是否会以某种方式溢出 void print address char p arp hw int i hw length size p OFFSET1 189 4 193 memcpy hw addr packet OFFSET
  • C++ 成员函数指针

    我正在用 C 做一个小游戏 我正在发现类成员函数指针 我不知道如何让它们以正确的方式工作 但这是我的尝试 A struct where the function pointer will be stored for the call By
  • django数据库同步以供离线使用

    我有一台主 django 服务器 用于存储数据 mysql 数据库 在线 我希望许多用户在他们的笔记本电脑上同步此数据库的副本 仅必须复制增量 sqlLite DB 离线 用户无权访问主服务器 用户可以查看和更新 其本地数据库 返回在线 用
  • 从受密码保护的 Excel 文件到 Python 对象

    我使用的是 Windows 7 Python 2 7 和 Microsoft Excel 2013 我知道从here https stackoverflow com questions 15285068 from password prot
  • Kotlin 中如何将 String 转换为 Int?

    我正在 Kotlin 中开发一个控制台应用程序 我在其中接受多个参数main 功能 fun main args Array
  • Spring Boot FlywayException:无法连接到数据库。配置url、用户和密码

    当我跑步时maven flyway migrate 我收到错误 无法执行目标 org flywaydb flyway maven plugin 6 5 5 migrate default cli 在项目 myProject 上 org fl
  • 何时在 Material UI 中使用“classes”与“className”?

    我对这两个属性有点困惑 如果我有 const useStyles makeStyles gt style width 600 height 400 那么 我可以做的是 const classes useStyles
  • 应用内购买在 Chrome 扩展中不起作用

    应用内购买屏幕正在返回 应用程序内屏幕的屏幕截图 https i stack imgur com E5Qf1 png 错误是 发生意外的错误 请稍后再试 解雇 正如你所看到的 其中一半也是黑色的 Buy js GOOGLE s CODE C
  • 在 PHP 中组合目录和文件名(相当于 .Net 中的 Path.Combine)

    This should be a simple question but I just can t recall the relevant API A search on google with the term doesn t yield
  • 在 Angular 2 打字稿中导入gapi.auth2

    我尝试在打字稿中从 Googlegapi auth2 导入一些类或函数 但即使我在typings目录中正确添加了gapi auth2类型 下面的代码也永远不会工作 import GoogleAuth from gapi auth2 我总是遇
  • 将 Firebase 与 Kotlin 协程结合使用:取消作业时任务不会取消

    在协程内部 借助 kotlinx coroutines play services 库中的await 函数 我使用如下内容 suspend fun uploadFile uri Uri withContext IO Firebase sto
  • 优化 JavaScript 代码以小写 JSON 属性名称

    我正在开发一个 Web 应用程序 该应用程序接收具有大写属性名称的 JSON 数据 我需要这些属性名称为小写 因此我使用一个函数递归地循环遍历 JSON 对象并将它们转换为小写 问题是我的 JSON 回复可能会变得非常大 我希望该函数能够表