为了优化这种赋值方式,可以考虑使用ES6的解构和展开运算符。
首先,我们可以使用解构运算符来提取需要赋值的变量,以增加代码的可读性和简洁性:
const { ContainerKey, formId } = obj;
obj[ContainerKey][formId[0]][formId[1]] = params;
接下来,我们可以使用展开运算符来简化代码,并且允许我们将多个赋值操作合并为一个语句:
const { ContainerKey, formId } = obj;
obj[ContainerKey] = {...obj[ContainerKey],[formId[0]]: {...obj[ContainerKey][formId[0]],[formId[1]]: params}
};
这种方式可以避免不必要的代码重复,并且使代码更易于扩展和维护。
PS:上面有个前提,就是所有属性的值必须是对象类型
,如果中间参杂了其他类型就不可以用这种方式,可以这样:
如果需要将多个变量设置为深层对象的某个属性,可以使用类似以下的方式:
const obj = {}; // 假设我们要设置 obj.a.b.c = value
const [a, b, c] = ['a', 'b', 'c'];
const value = 123;obj[a] = obj[a] || {};
obj[a][b] = obj[a][b] || {};
obj[a][b][c] = value;
上述代码中,我们先定义了一个空的对象obj
和要设置的属性变量a
、b
、c
以及属性值value
。然后,我们首先判断obj
对象是否已经存在a
属性,如果不存在则将a
属性初始化为空对象;接着,我们在obj[a]
下判断是否存在b
属性,如果不存在则将b
属性初始化为空对象;最终,我们在obj[a][b]
下设置c
属性的值为value
。
如果属性变量和属性值都是动态生成的,上述方式可以灵活设置深层对象的任意属性值。如果需要设置多个对象的属性,可以将上述代码作为一个函数,传入需要操作的对象和属性等参数,以减少代码重复。