例如我有对象:
person = {
Name: 'John',
Address: {
Name: 'NY'
}
}
我有一系列属性:
0: Name,
1: Address.Name,
2: Car.Name
如果它们不存在,我想创建所有属性(对象)。例如上面,我想得到:
{
Name: 'John',
Address: {
Name: 'NY'
},
Car: {
Name: null
}
}
PS。该阵列是动态构建的。我不知道有哪些属性。
答案 0 :(得分:3)
要添加缺少的属性,您可以遍历这些属性,检查它是否存在于对象中并根据需要添加。
// original object
var person = {
Name: 'John',
Address: {
Name: 'NY'
}
};
// list of all properties
var props = ['Name', 'Address.Name', 'Car.Name'];
// iterate through the properties and add as needed
props.forEach(function(prop) {
var root = person;
prop = prop.split('.'); // split by . to use [] notation subsequently
for(var i=0; i<prop.length; i++) {
if(typeof root[prop[i]] === 'undefined') root[prop[i]] = (i === prop.length-1 ? null : {});
root = root[prop[i]];
}
});
console.log(person);
/*
{
Name: 'John',
Address: {
Name: 'NY'
},
Car: {
Name: null
}
}
*/
答案 1 :(得分:0)
您可以先创建一个所有属性都设置为null的对象,然后使用$.extend将它们合并在一起。
obj = {
Name: null,
Addess: {
Name: null
},
Car: {
Name: null
}
};
person = {
Name: 'John',
Addess: {
Name: 'NY'
}
};
person = $.extend(true,obj,person);
答案 2 :(得分:0)
我不明白为什么你需要那个,但据我所知它没用。
如果您需要验证是否设置了值,则可以执行
var result = (person.Address && person.Address.Name) //true will be returned if address and address name are not null and defined.
答案 3 :(得分:0)
如果尚未创建特定属性,则typeof将返回undefined。你可以利用它来创造新的财产。
if(typeof Car.Name === "undefined")
Car.Name = null; //initialize to some value