如何在javascript中最有效地重命名项数组中的键?

如何在javascript中最有效地重命名项数组中的键?,javascript,Javascript,我有一个10000个对象的数组。每个对象都是这样的: {"id":5, "name": "Jordin Sparks} 对我来说,最有效、最快的重命名键的方法是什么,以使数组中的每个对象都成为: {"num":5, "fullname": "Jordin Sparks"} 换句话说,“id”属性重命名为“num”,每个对象的“name”属性重命名为“fullname”。来自: 您可以运行ObjectO1000.renameProperty('id','num')和ObjectO1000.re

我有一个10000个对象的数组。每个对象都是这样的:

{"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 } });