这个问题可以通过使用 JavaScript 中的递归函数来解决。以下是一个可能的解决方案:
function accessNestedObject(obj, path, value) {
let keys = path.split('.');
let key = keys[0];
if (keys.length > 1) {
obj[key] = {};
accessNestedObject(obj[key], keys.slice(1).join('.'), value);
} else {
obj[key] = value;
}
return obj;
}
let expression = { a: { b: { c: { d: { f: 123 } } } } };
accessNestedObject(expression, 'a.b.c.d.f', 456);
console.log(expression); // { a: { b: { c: { d: { f: 456 } } } } }
这个 accessNestedObject 函数接受三个参数:一个对象,一个包含要访问的属性的路径,以及一个要设置的值。该函数将路径拆分成键的数组,然后逐个访问这些键,并在每个级别创建一个新的对象,如果路径中还有更多的键。当到达最深层的键时,该函数会设置给定的值。然后该函数返回修改后的对象。
在上面的例子中,我们首先创建了一个名为 expression 的对象,然后使用 accessNestedObject 函数将 f 属性的值设置为 456。然后我们打印出 expression,可以看到 f 的值已经被成功更改。
你直接看lodash的源码 https://www.lodashjs.com/docs/lodash.set
你项目里直接安装lodashjs也可以
或者直接去吧 set 方法的源代码拷贝到项目里就行了 没必要自己写