我想要这样的东西:
var myObj = {};
myObj["a"]["b"].push({"c":"d"});
我希望 myObj 成为: {"a":{"b":[{"c":"d"}]}}
但出现错误
Cannot set property 'b' of undefined
是的,我知道我可以像这样一步一步地创建它:
var myObj={};
myObj["a"]={};
myObj["a"]["b"]=[];
myObj["a"]["b"].push({"c":"d"});
但是如果 myObj 已经有一些结构并且我不想破坏它怎么办?例如:
var myObj={"a":{"e":"f"}};
如果我写 myObj["a"]={};
我会丢失数据。
当然我可以写
if(myObj["a"]==null){
myObj["a"]={}
}
但是它太笨重了!如果我可以像 myObj["a"]["b"].push({"c":"d"});
这样编写而不在每一步检查 null ,那就太好了.
有什么建议如何做到这一点?可能有一种方法可以覆盖 JS 原生对象或类似的东西?
预先感谢您!
最佳答案
恐怕不可能像这样覆盖 JS 的原生功能。
您必须检查子属性。
如果您想确保对象上存在某个属性而不覆盖它,请执行以下操作:
myObj['a'] = myObj['a'] || {};
如果 myObj['a']
有值,则将其设置为自身;如果没有值,则设置为新的空对象。
然后对 myObj['a']['b']
执行相同操作,然后推送到该位置:
myObj['a']['b'] = myObj['a']['b'] || [];
myObj['a']['b'].push({"c":"d"});
关于javascript - JS : Dynamically create subproperties of non-existing property,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14724591/