如何创建对象的空副本?

use*_*646 3 javascript

我正在从 JSON 创建一些对象,我想制作一个对象的空副本。我将拥有所有相同的属性,但值为空。有什么好的方法可以做到这一点?

现在我正在按如下方式执行此操作,但希望它从我从收到的 JSON 创建的对象中变得动态。

var myObject = { "Address": { "Address1": "", "Address2": "", "Address3": "", "Address4": "", "City": "", "": "", "": "", "Country": "", "Id": -1, "LastModified": "", "PostBackAction": null }, "Id": -1, "Amenities": "", "Directions": "", "LastModified": "", "LocalAttractions": "", "LocalLodging": "", "LocalRestaraunts": "", "Name": "", "Pictures": "", "Prices": "", "Region": 0, "PostBackAction": null };
Run Code Online (Sandbox Code Playgroud)

一个可能的解决方案不起作用,因为它复制了值。

var myObject = JSON.parse(JSON.stringify(objectToBeCopied));
Run Code Online (Sandbox Code Playgroud)

Guf*_*ffa 6

您可以使用创建对象结构副本并为每种数据类型使用默认值的函数:

function skeleton(source, isArray) {
  var o = Array.isArray(source) ? [] : {};
  for (var key in source) {
    if (source.hasOwnProperty(key)) {
      var t = typeof source[key];
      o[key] = t == 'object' ? skeleton(source[key]) : { string: '', number: 0, boolean: false }[t];
    }
  }
  return o;
}
Run Code Online (Sandbox Code Playgroud)

演示:http : //jsfiddle.net/Guffa/ym6ZJ/