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

6

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

{"id":5, "name": "Jordin Sparks}

什么是将键重命名为使数组中的每个对象变得最有效和最快的方法?
{"num":5, "fullname": "Jordin Sparks"}

换句话说,“id”属性被重命名为“num”,每个对象的“name”属性被重命名为“fullname”。

可能是重复的问题,参考 JavaScript: Object Rename Key - Andrew Mast
为什么你不能一开始就使用这些名称呢? - Frederik.L
你在寻找什么兼容性?有哪些功能可以用来实现这种效率?所涉及的对象是否保证只有这些键?空间效率还是时间效率?...效率最好在上下文中理解。 - allonhadaya
例如,如果上下文允许,您可以通过异步执行此工作来提高响应能力。 - allonhadaya
5个回答

2

暴力破解方法。将其转换为字符串,重命名字段并解析为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);

编辑:将replace修改为global。


这看起来可能是最快的,但你需要运行定时器来确保天真的方法不更快。 - jamylak

1

我不知道这是否是最有效的方法,但这是我的尝试。

for(var i = arr.length; i--; ){
  var obj = arr[i];
  obj.num = obj.id;
  obj.fullname = obj.name;
  delete obj.id;
  delete obj.name;
}

1
个人而言,我会这样做。
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];
       }
    }
  }
}

您可以这样调用,其中myArray是您的对象数组。
renameKeys(myArray, [ 
  {from: "id", to: "num" }, 
  { from: "name", to: "fullname" } 
]);

具有可重用于任意数量的名称重新映射的优点。不修改本地原型。并且只在数组周围迭代一次,无论进行多少个重新映射。


0
arr.map(function (item) { return { num: item.id, fullname: item.name } });

0

来自https://dev59.com/-W445IYBdhLWcg3w5OEH#4648411

Object.prototype.renameProperty = function (oldName, newName) {
    // Do nothing if the names are the same
    if (oldName == newName) {
        return this;
    }

    // Check for the old property name to avoid a ReferenceError in strict mode.
    if (this.hasOwnProperty(oldName)) {
        this[newName] = this[oldName];
        delete this[oldName];
    }

    return this;
};

你需要运行 objectOf1000.renameProperty('id', 'num')objectOf1000.renameProperty('name', 'full name')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接