Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何创建对象的空副本?_Javascript - Fatal编程技术网

Javascript 如何创建对象的空副本?

Javascript 如何创建对象的空副本?,javascript,Javascript,我正在从JSON创建一些对象,我想创建一个对象的空副本。我将拥有所有相同的属性,但值为空。有什么好方法可以做到这一点 现在我按照下面的步骤来做,但是我希望它是动态的,从我收到的JSON创建的对象开始 var myObject = { "Address": { "Address1": "", "Address2": "", "Address3": "", "Address4": "", "City": "", "": "", "": "", "Country": "", "Id": -1, "La

我正在从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 };
可能的解决方案不起作用,因为它复制了值

var myObject = JSON.parse(JSON.stringify(objectToBeCopied));

希望这就是你想要的:

    var myObject = function(){
    this.address = {
        'Address1': '',
        'Address2': '',
        'Address3': '',
        'Address4': '',
        'City': '',
        'Country': '',
        'Id': 0,
        'LastModified': '',
        'PostBackAction': null
    };
    this.Id = -1;
    this.Amenities = '';
    this.Directions = '';
    this.LastModified = '';
    this.LocalAttractions = '';
    this.LocalLodging = '';
    this.LocalRestaraunts = '';
    this.Name = '';
    this.Pictures = '';
    this.Prices = '';
    this.Region = 0;
    this.PostBackAction = null;

}       
// create two new objects
var objectOne = new myObject();
var objectTwo = new myObject();

console.log(objectOne);

//modify the first
objectOne.address.Address1 = 'Lol Street';
console.log(objectOne);
//notice the second one was not changed
console.log(objectTwo);

希望这就是你想要的:

    var myObject = function(){
    this.address = {
        'Address1': '',
        'Address2': '',
        'Address3': '',
        'Address4': '',
        'City': '',
        'Country': '',
        'Id': 0,
        'LastModified': '',
        'PostBackAction': null
    };
    this.Id = -1;
    this.Amenities = '';
    this.Directions = '';
    this.LastModified = '';
    this.LocalAttractions = '';
    this.LocalLodging = '';
    this.LocalRestaraunts = '';
    this.Name = '';
    this.Pictures = '';
    this.Prices = '';
    this.Region = 0;
    this.PostBackAction = null;

}       
// create two new objects
var objectOne = new myObject();
var objectTwo = new myObject();

console.log(objectOne);

//modify the first
objectOne.address.Address1 = 'Lol Street';
console.log(objectOne);
//notice the second one was not changed
console.log(objectTwo);

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

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;
}

演示:

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

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;
}

演示:

你希望你的输出是什么?你认为什么是空的?代码>{地址:未定义}?为什么你没有一个空对象并复制它来创建对象?你希望你的输出是什么?你认为什么是空的?代码>{地址:未定义}?你为什么不拥有一个空对象并复制它来创建对象呢?我建议不要在非对象插槽中使用空对象(
{}
)。@Bergi你会用什么来代替?
未定义的
空的
,随便什么。Falsy属性所具有类型的值。我建议不要对非对象插槽使用空对象(
{}
)。@Bergi您将使用什么替代?
未定义的
null
,无论什么。Falsy属性具有的类型的值。我正在寻找一种动态执行此操作的方法。您不能循环使用JSON并基于此创建新对象吗?任何留空的内容都将接收默认值。也许我没有正确地理解这个问题?我在寻找一种动态执行的方法。你不能循环使用JSON并在此基础上创建新对象吗?任何留空的内容都将接收默认值。也许我没有正确理解这个问题?