Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用一行代码递归地向Javascript数组添加属性?_Javascript - Fatal编程技术网

如何使用一行代码递归地向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 谢谢。是的

我想向尚未分配的Javascript对象添加一个特定属性,该属性是父对象的一部分。通常我会做以下工作:

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的东西