Javascript 如何创建对象的空副本?
我正在从JSON创建一些对象,我想创建一个对象的空副本。我将拥有所有相同的属性,但值为空。有什么好方法可以做到这一点 现在我按照下面的步骤来做,但是我希望它是动态的,从我收到的JSON创建的对象开始Javascript 如何创建对象的空副本?,javascript,Javascript,我正在从JSON创建一些对象,我想创建一个对象的空副本。我将拥有所有相同的属性,但值为空。有什么好方法可以做到这一点 现在我按照下面的步骤来做,但是我希望它是动态的,从我收到的JSON创建的对象开始 var myObject = { "Address": { "Address1": "", "Address2": "", "Address3": "", "Address4": "", "City": "", "": "", "": "", "Country": "", "Id": -1, "La
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并在此基础上创建新对象吗?任何留空的内容都将接收默认值。也许我没有正确理解这个问题?