javascript - JS : Dynamically create subproperties of non-existing property

标签 javascript

我想要这样的东西:

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/

相关文章:

Javascript div onhover 增量计数

javascript - 从 Firebase 数据库检索过去 2 天的结果

javascript - 如何折叠 Bootstrap 4 Accordion 示例中的边框?

javascript - 检索智能手机的电话号码或 IMEI

javascript - 如何迭代对象数组并添加属性

javascript - typescript : Importing something that was exported with module. 导出

javascript - rxjs 过滤器在 false 条件下不返回任何内容

javascript - bxSlider jQuery 插件问题

Javascript XSLT 框架

javascript - Redux 形式奇怪的箭头函数语法