如何使用一行代码递归地向Javascript数组添加属性?
我想向尚未分配的Javascript对象添加一个特定属性,该属性是父对象的一部分。通常我会做以下工作:如何使用一行代码递归地向Javascript数组添加属性?,javascript,Javascript,我想向尚未分配的Javascript对象添加一个特定属性,该属性是父对象的一部分。通常我会做以下工作: let obj = {}; if(!obj["property"]) { obj["property"] = {}; } obj["property"]["property2"] = value; 上面的代码是否可以用一行代码编写,而在if语句中没有对象分配 与Linux相比,我希望使用类似于mkdir-p./a/b的东西,而不是mkdira;裁谈会a;mkdir b 谢谢。是的
let obj = {};
if(!obj["property"])
{
obj["property"] = {};
}
obj["property"]["property2"] = value;
上面的代码是否可以用一行代码编写,而在if语句中没有对象分配
与Linux相比,我希望使用类似于mkdir-p./a/b的东西,而不是mkdira;裁谈会a;mkdir b
谢谢。是的,您可以这样做: 设obj={}; obj[property]=obj[property]|{}[property2]=value;
console.logobj 是的,您可以这样做: 设obj={}; obj[property]=obj[property]|{}[property2]=value;
console.logobj 您可以减少给定的键,并在最后一步指定值 这适用于任意数量的键
["property", "property2"]
.reduce((o, k, i, { length }) => o[k] = o[k] || (i + 1 === length ? value : {}), obj);
您可以减少给定的键,并在最后一步指定值 这适用于任意数量的键
["property", "property2"]
.reduce((o, k, i, { length }) => o[k] = o[k] || (i + 1 === length ? value : {}), obj);
其他答案很好,但作为替代,您可以使用lodash的: 常量{set}=\//从lodash导入{set}; 设obj={}; setobj,property.property2,value; console.logobj;
其他答案很好,但作为替代,您可以使用lodash的: 常量{set}=\//从lodash导入{set}; 设obj={}; setobj,property.property2,value; console.logobj;
齐吉-维吉解决方案会奏效 或者,尽管您也可以执行obj={…obj,property:{…obj.property,property2:value}
这实际上比较慢,因为它创建了一个新对象,然后将其分配给obj,但如果希望保持obj不变,则最好是这样,在这种情况下,只需将结果分配给一个新变量即可。const obj2={…obj,property:{…obj.property,property2:value} ziggy-wiggy解决方案将起作用 或者,尽管您也可以执行obj={…obj,property:{…obj.property,property2:value}
这实际上比较慢,因为它创建了一个新对象,然后将其分配给obj,但如果希望保持obj不变,则最好是这样,在这种情况下,只需将结果分配给一个新变量即可。const obj2={…obj,property:{…obj.property,property2:value} 有人说JS有一个空合并运算符,但现在不确定它的位置。@ziggywiggy请参阅和。这对于获取属性路径很好,但是它们不支持任何语法来进行设置。您需要的是类似于obj[property]?={}[property2]=value的东西。有人说JS有一个空的合并运算符,但现在不确定它的位置。@ziggywiggy请参阅和。这对于获取属性路径很好,但是它们不支持任何语法来进行设置。您需要的是类似于obj[property]?={}[property2]=value的东西