用 new Function 提高运行效率

ByteRiderX
• 阅读 1745

为了减小列表数据的尺寸,后端把json处理成数组返回(类似于csv)。格式如下:

[
    ['basqty','brandfullname','fullname','gid'],
    [470,'金富士','【今日爆款】#金富士土斯动物饼干香蕉牛奶味50g',43945919],
    [470,'金富士','【今日爆款】#金富士土斯动物饼干香蕉牛奶味50g',43945919],
    ...
]

前端获取到数据后解析,格式如下:

[
    {
        "basqty":470,
        "brandfullname":"金富士",
        "fullname":"【今日爆款】#金富士土斯动物饼干香蕉牛奶味50g",
        "gid":"【今日爆款】#金富士土斯动物饼干香蕉牛奶味50g"
    },
    {
        "basqty":470,
        "brandfullname":"金富士",
        "fullname":"【今日爆款】#金富士土斯动物饼干香蕉牛奶味50g",
        "gid":"【今日爆款】#金富士土斯动物饼干香蕉牛奶味50g"
    },
    ...
]

优化前正常的解析代码:

function array2json(array) {
    var keys = array.shift();
    return array.length ? array.map(function (ary) {
        var row= {};
        keys.forEach(function (key, i) {
            row[key] = ary[i]
        })
        return row
    }) : []
}

运行一个 24000 行,每行 94 个字段的数组,大概需要 400 毫秒
用 new Function 提高运行效率

优化思路:省去中间 forEach 遍历赋值

function array2json(array) {
    var keys = array.shift();
    return array.length ? array.map(function (ary) {
        //如果能够省去中间 forEach 遍历赋值效率会高很多
        return {
            "basqty":ary[0],
            "brandfullname":ary[1],
            ...
        }
    }) : []
}

用 new Function 来构造中间的 return 对象

function listArrayTolistJson(array) {
    var keys = array.shift();
    return array.length ? array.map(new Function("ary", "return {" + keys.map(function (key, i) { return "'" + key + "':ary[" + i + "]" }).join(',') + "}")) : []
}

运行截图,大概快了 7 倍
用 new Function 提高运行效率

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
待兔 待兔
11个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Stella981 Stella981
3年前
SpringBoot学习:整合shiro自动登录功能(rememberMe记住我功能)
首先在shiro配置类中注入rememberMe管理器!复制代码(https://oscimg.oschina.net/oscnet/675f5689159acfa2c39c91f4df40a00ce0f.gif)/cookie对象;rememberMeCookie()方法是设置Cookie的生成模
Stella981 Stella981
3年前
Leetcode No.39 组合总和
此文转载自:https://blog.csdn.net/jxq0816/article/details/113079141commentBox一、题目描述给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字
Easter79 Easter79
3年前
SpringBoot学习:整合shiro自动登录功能(rememberMe记住我功能)
首先在shiro配置类中注入rememberMe管理器!复制代码(https://oscimg.oschina.net/oscnet/675f5689159acfa2c39c91f4df40a00ce0f.gif)/cookie对象;rememberMeCookie()方法是设置Cookie的生成模
Stella981 Stella981
3年前
LeetCode 39. Combination Sum
问题链接LeetCode39.CombinationSum(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fleetcode.com%2Fproblems%2Fcombinationsum%2Fdescription%2F)题目解析给一组数和一个目
Wesley13 Wesley13
3年前
ANDROID解析JSON数据
这一个环节可以说是卡的比较久的了。对于用惯了php那样的json解析方式的我,头一次使用JAVA的json解析方法,感到非常的头疼。首先,服务端返回的数据格式如下:    {        "title":"\u8bdd\u8d39\u514d\u8d39\u62bd",        "aname":"\u8
Stella981 Stella981
3年前
39、chen框架
由于后台使用了chen框架,所以代码不能完全列出,可以到http://git.oschina.net/eternal\_rider/chen(http://git.oschina.net/eternal_rider/chen)下载项目,运行后,即可看到菜单效果级管理。示例框架中写了一个jquery菜单插件实现,可以使用存html代码样式
Stella981 Stella981
3年前
ReactNative state更新,视图不更新的问题
开发中遇到这样的问题,我更新了state一个数组的某个元素的选中状态,打印出的数据也显示修改正确了,但是界面却没更新。例如下图点击某项修改选中状态。!(https://oscimg.oschina.net/oscnet/c3291a62b5f638d1e35dd7a719ade39f226.png)代码中之前是这样写的,结果界面没有更新。
Stella981 Stella981
3年前
Eclipse 中的Maven常见报错及解决方法
1.不小心将项目中的MavenDependencies删除报错!(https://oscimg.oschina.net/oscnet/fd35e500e2580bca2afb81f35233b87a6ee.png)项目报错:!(https://oscimg.oschina.net/oscnet/8623bd4293fea39ca83a6
跨端轻量JavaScript引擎的实现与探索
一、JavaScript1.JavaScript语言JavaScript是ECMAScript的实现,由ECMA39(欧洲计算机制造商协会39号技术委员会)负责制定ECMAScript标准。ECMAScript发展史:|时间|版本|说明||||||1997