如何在javascript中最有效地重命名项数组中的键?
我有一个10000个对象的数组。每个对象都是这样的:如何在javascript中最有效地重命名项数组中的键?,javascript,Javascript,我有一个10000个对象的数组。每个对象都是这样的: {"id":5, "name": "Jordin Sparks} 对我来说,最有效、最快的重命名键的方法是什么,以使数组中的每个对象都成为: {"num":5, "fullname": "Jordin Sparks"} 换句话说,“id”属性重命名为“num”,每个对象的“name”属性重命名为“fullname”。来自: 您可以运行ObjectO1000.renameProperty('id','num')和ObjectO1000.re
{"id":5, "name": "Jordin Sparks}
对我来说,最有效、最快的重命名键的方法是什么,以使数组中的每个对象都成为:
{"num":5, "fullname": "Jordin Sparks"}
换句话说,“id”属性重命名为“num”,每个对象的“name”属性重命名为“fullname”。来自:
您可以运行
ObjectO1000.renameProperty('id','num')
和ObjectO1000.renameProperty('name','full name')
我不知道这是否真的是最有效的,但下面是我的尝试
for(var i = arr.length; i--; ){
var obj = arr[i];
obj.num = obj.id;
obj.fullname = obj.name;
delete obj.id;
delete obj.name;
}
就我个人而言,我会这样做
function renameKeys(arr, nameMap) {
// loop around our array of objects
for(var i = 0; i < arr.length; i++) {
var obj = arr[i];
// loop around our name mappings
for(var j = 0; j < nameMap.length; j++) {
var thisMap = nameMap[j];
if(obj.hasOwnProperty(thisMap.from)) {
// found matching name
obj[thisMap.to] = obj[thisMap.from];
delete obj[thisMap.from];
}
}
}
}
其优点是,它可用于任意数量的名称重新映射。不修改本机原型。并且只在数组中迭代一次,不管发生了多少次重新映射。蛮力方法。转换为字符串、重命名字段并解析为JSON
var src = {"id":5, "name": "Jordin Sparks"};
var str = JSON.stringify(src);
var rst = JSON.parse(str.replace(/"id"/g, '"num"').replace(/"name"/g, '"fullname"'));
console.debug(rst);
编辑:修改替换为全局 可能重复的名称为什么不能首先使用这些名称?您需要什么兼容性?可以使用任何功能来实现这种效率吗?有问题的对象是否保证只有这些密钥?空间效率还是时间效率?。。。效率最好在上下文中理解。例如,如果上下文允许,您可以通过异步执行此工作来提高响应速度。这看起来可能是最快的,但您需要运行计时以确保NAIVE方法不会更快
arr.map(function (item) { return { num: item.id, fullname: item.name } });
var src = {"id":5, "name": "Jordin Sparks"};
var str = JSON.stringify(src);
var rst = JSON.parse(str.replace(/"id"/g, '"num"').replace(/"name"/g, '"fullname"'));
console.debug(rst);
arr.map(function (item) { return { num: item.id, fullname: item.name } });