我想要这样的事情:
var myObj = {};
myObj["a"]["b"].push({"c":"d"});
我希望myObj成为:{"a":{"b":[{"c":"d"}]}}
但我收到错误
无法设置未定义的属性'b'
是的,我知道我可以像这样一步一步地创建它:
var myObj={};
myObj["a"]={};
myObj["a"]["b"]=[];
myObj["a"]["b"].push({"c":"d"});
但是,如果myObj已经有了一些结构,我不想破坏它。 E.g:
var myObj={"a":{"e":"f"}};
如果我写myObj["a"]={};
,我将丢失数据
当然可以写
if(myObj["a"]==null){
myObj["a"]={}
}
但它太笨重了!如果我可以像myObj["a"]["b"].push({"c":"d"});
那样编写smth而不检查每一步的null,那就太棒了
有什么建议怎么做?可能有一种方法可以覆盖JS本机对象或类似的东西吗?
提前谢谢!
答案 0 :(得分:2)
你做不到。 Netscape为代码批量道歉。为什么不呢?
var myObj = {};
myObj.a = {b:[{c:'d'}]};
答案 1 :(得分:1)
我担心不可能覆盖JS的原生功能。
您将不得不检查子属性。
如果要确保对象上存在属性而不覆盖它,请执行以下操作:
myObj['a'] = myObj['a'] || {};
如果它有值,则将myObj['a']
设置为自身,如果没有,则设置为新的空对象。
然后对myObj['a']['b']
执行相同操作,并推送到:
myObj['a']['b'] = myObj['a']['b'] || [];
myObj['a']['b'].push({"c":"d"});