重命名另一个对象内的对象的键

时间:2015-08-24 13:15:43

标签: jquery object underscore.js

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

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"。有没有比使用地图更好的方法呢?

我还想保持对象的整个结构相同。从我所看到的,最好的方法是将对象信息复制到具有更改的字符串的另一个对象。这是对的吗?

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您无法重命名某个媒体资源,但您可以添加一个具有该资产值的新资源,并删除旧资源。

假设您确实拥有该结构,可以将其写为对象初始值设定项,如下所示:

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>
&#13;
&#13;
&#13;

这不太重要,但如果访问此对象的属性是绝对性能关键,并且您已经确定了物业访问速度的实际问题,那么您将会#39最好离开那里的老房子,而不是使用它。使用delete从对象中删除属性会使对它们的属性访问速度明显慢于现代引擎上的属性。但又一次:担心它如果 时你会看到现实世界的问题。