可以使用递归实现安全设置对象的值。以下是一个实现setObjectValue方法的例子:
typescriptCopy codefunction setObjectValue(obj: object, keys: string[], value: any) {
const key = keys.shift();
if (!key) {
return;
}
if (keys.length === 0) {
obj[key] = value;
return;
}
if (!obj[key]) {
obj[key] = {};
}
setObjectValue(obj[key], keys, value);
}这个方法接受三个参数:要设置值的对象,一个字符串数组表示对象的键的路径,和要设置的值。例如,如果要设置对象user的address字段的city属性为"New York",可以调用方法:
typescriptCopy codeconst user = {};
setObjectValue(user, ['address', 'city'], 'New York');在这个例子中,keys数组的第一个元素是"address",所以我们检查user对象是否有一个名为"address"的属性。如果没有,我们创建一个新对象并将其分配给user.address属性。然后我们继续递归地调用setObjectValue方法,将新对象作为第一个参数传递,将keys数组的剩余部分作为第二个参数传递,将最终的值作为第三个参数传递。最终,我们将"New York"分配给user.address.city属性。
这个方法确保在设置对象值时不会引发TypeError异常,即使对象的某些部分尚未定义。