【问题标题】:JavaScript: Object Rename KeyJavaScript:对象重命名键
【发布时间】:2011-06-06 13:51:15
【问题描述】:

是否有一种聪明的(即优化的)方法来重命名 javascript 对象中的键?

一种未优化的方式是:

o[ new_key ] = o[ old_key ];
delete o[ old_key ];

【问题讨论】:

  • “优化”是什么意思?我认为没有比这更简洁的了。没有“重命名”内置操作。
  • 这就是你所能得到的。我会担心我的应用程序中的其他事情。顺便说一句,您处理的是对象,而不是数组。 JavaScript 中没有关联数组(严格意义上)。
  • @Jean Vincent:有那么慢吗?
  • 这是最优化最基础的版本
  • 你的版本是所有现代浏览器中最快的,除了safari,示例测试用例@jsperf.com/livi-006

标签: javascript object key rename


【解决方案1】:

如果你想保持对象的相同顺序

changeObjectKeyName(objectToChange, oldKeyName: string, newKeyName: string){
  const otherKeys = cloneDeep(objectToChange);
  delete otherKeys[oldKeyName];

  const changedKey = objectToChange[oldKeyName];
  return  {...{[newKeyName] : changedKey} , ...otherKeys};

}

使用方法:

changeObjectKeyName ( {'a' : 1}, 'a', 'A');

【讨论】:

    【解决方案2】:

    搜索了很多答案后,这对我来说是最好的解决方案:

    const renameKey = (oldKey, newKey) => {
      _.reduce(obj, (newObj, value, key) => {
        newObj[oldKey === key ? newKey : key] = value
        return newObj
      }, {})
    }
    

    它不是替换原来的键,而是构造一个新的对象,很明显。 问题中的方式有​​效,但会改变对象的顺序,因为它将新的键值添加到最后一个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-14
      • 2015-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多