JavaScript在不知道级别的情况下为嵌套对象中的元素赋值

Hyp*_*nos 1 javascript object

说我有这样一个对象:

a : {
  a1 : {
    a2: true
  } 
}
Run Code Online (Sandbox Code Playgroud)

我将所有路径保存在一个数组中:

[a1, a2]
Run Code Online (Sandbox Code Playgroud)

如果我想为["a1"] ["a2"]赋值,很容易:

a["a1"]["a2"] = true;
Run Code Online (Sandbox Code Playgroud)

但是,当我有这样的3级路径时:

[a1, a2, a3]
Run Code Online (Sandbox Code Playgroud)

我必须像这样手动编写代码:

a["a1"]["a2"]["a3"] = true;
Run Code Online (Sandbox Code Playgroud)

有没有办法自动处理任何级别的路径,这样我就不必为每一个案例明确表达它?

请注意,"a"可能非常复杂,因此我只想为此特定元素赋值而不触及其余元素.

Ell*_*lle 5

您可以使用如下路径迭代遍历对象:

function setDeepProperty(obj, path, value)
{
    var curr = obj;

    for (var depth = 0; depth < path.length - 1; depth++)
    {
        curr = curr[path[depth]];
    }

    curr[path[path.length - 1]] = value;
}
Run Code Online (Sandbox Code Playgroud)

这假设路径有效.path[depth] in curr如有必要,请确保.遍历的最后一步是在循环之外完成的,因为它将设置curr为基本类型而不是引用数组(如我们所愿),这意味着它不会更改原始数据.然后,按照你的例子:

var arr = {a1: {a2: { a3: false }}};
setDeepProperty(arr, ["a1", "a2", "a3"], true);
Run Code Online (Sandbox Code Playgroud)

请注意,路径中的节点是字符串.