在另一个对象中重命名一个对象的键

Renaming keys of an object inside another object

我在尝试重命名另一个对象中一个对象的键时遇到了一些问题。我的对象结构如下:

Object {
  json: Object {
    String Title 2: Object {
      2015-07-20: 0
      2015-08-28: 0
      2015-09-28: 0
    }
  }
}

我一直在玩弄 Underscore 的 MAP 函数,但是当我更改 json 键的值时,它也会删除那里的整个对象。我只想更改字符串 "String Title 2"。有比地图更好的方法吗?

我也想保持对象的整个结构不变。据我所知,最好的方法是将对象信息复制到另一个具有更改字符串的对象。对吗?

感谢您的帮助。

您不能重命名 属性,但您可以添加一个新的,其值与现有的相同,并删除旧的。

假设你真的有那个结构,它可以写成这样的对象初始化器:

var obj = {
  json: {
    "String Title 2": {
      "2015-07-20": 0,
      "2015-08-28": 0,
      "2015-09-28": 0
    }
  }
};

那么你可以这样做:

// Add new
obj.json.newPropertyName = obj.json["String Title 2"];
// Remove old
delete obj.json["String Title 2"];

免费实例:

var obj = {
  json: {
    "String Title 2": {
      "2015-07-20": 0,
      "2015-08-28": 0,
      "2015-09-28": 0
    }
  }
};
snippet.log("Before: " + JSON.stringify(obj));

// Add new
obj.json.newPropertyName = obj.json["String Title 2"];
// Remove old
delete obj.json["String Title 2"];

snippet.log("After: " + JSON.stringify(obj));
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>


这不太可能有关系,但如果访问此对象的属性绝对对性能至关重要,并且您发现了速度为 属性 的现实世界问题访问,你最好把旧的 属性 留在那里,不要使用它。在现代引擎上,使用 delete 从对象中删除属性会使 属性 访问它们的速度明显慢于不这样做的情况。但同样:担心它 ifwhen 你看到一个现实世界的问题。