创建子对象(如果它们不存在)

时间:2014-07-31 08:30:27

标签: javascript jquery

例如我有对象:

person = {
            Name: 'John',
            Address: {
               Name: 'NY'
            }
         }

我有一系列属性:

0: Name,
1: Address.Name,
2: Car.Name

如果它们不存在,我想创建所有属性(对象)。例如上面,我想得到:

 {
       Name: 'John',
       Address: {
          Name: 'NY'
       },
       Car: {
          Name: null
      }
 }

PS。该阵列是动态构建的。我不知道有哪些属性。

4 个答案:

答案 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