栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在对象数组中有效地重命名/重新映射javascript / json对象键

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在对象数组中有效地重命名/重新映射javascript / json对象键

正如我在评论中已经提到的那样,如果可以对对象的值进行某些假设,则可以使用正则表达式替换键,例如:

str = str.replace(/"title":/g, '"name":');

它不是“干净”的,但是可以更快地完成工作。


如果仍然必须解析JSON,则一种更结构化的方法是将 reviver
函数传递给

JSON.parse


JSON,这样您就可以避免对数组进行额外传递。不过,这可能取决于引擎的实现方式
JSON.parse
(也许它们首先解析整个字符串,然后使用reviver函数进行第二遍处理,在这种情况下,您将无法获得任何好处)。

var arr = JSON.parse(str, function(prop, value) {   switch(prop) {     case "title":        this.name = value;        return;     case "uid":        this.id = value;        return;     default:        return value;   }});

基准测试,使用下面的Node.js脚本进行3次测试:

1389822740739: Beginning regex rename test1389822740761: Regex rename complete// 22ms, 22ms, 21ms1389822740762: Beginning parse and remap in for loop test1389822740831: For loop remap complete// 69ms, 68ms, 68ms1389822740831: Beginning reviver function test1389822740893: Reviver function complete// 62ms, 61ms, 60ms

看起来regex(在这种情况下)是最有效的,但是在尝试使用正则表达式解析JSON时要小心


测试脚本,加载OP的示例JSON的100,230行:

fs = require('fs');fs.readFile('test.json', 'utf8', function (err, data) {    if (err) {        return console.log(err);    }    console.log(new Date().getTime() + ": Beginning regex rename test");    var str = data.replace(/"title":/g, '"name":');    str = str.replace(/"uid":/g, '"id":');    JSON.parse(str);    console.log(new Date().getTime() + ": Regex rename complete");    console.log(new Date().getTime() + ": Beginning parse and remap in for loop test");    var arr = JSON.parse(data);    for (var i = 0; i < arr.length; i++) {        arr[i].name = arr[i].title;        arr[i].id = arr[i].uid;        delete arr[i].title;        delete arr[i].uid;    }    console.log(new Date().getTime() + ": For loop remap complete");    console.log(new Date().getTime() + ": Beginning reviver function test");    var arr = JSON.parse(data, function (prop, value) {        switch (prop) { case "title":     this.name = value;     return; case "uid":     this.id = value;     return; default:     return value;        }    });    console.log(new Date().getTime() + ": Reviver function complete");});


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/633562.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号