在不知道给定的键数量的情况下设置对象的嵌套值

时间:2017-11-07 03:54:26

标签: javascript node.js

我有一个函数可以获得一个任意大小的数组,以及一个值。该函数应将给定的键应用于具有嵌套对象的对象,然后将最后一个键设置为给定的值。然后它将对象存储在其他地方。

当密钥数量已知且一致(object[key1][key2][key3] = value)时,这很容易完成,但是当给定的密钥数量未知时,似乎无法做到这一点。

我知道我不能做这样的事情

let foo = object[stack[0]];
stack.slice(1).forEach(key => foo = foo[key]);
foo = value;

因为那样最终会重新分配foo 我想做的是能够做object[stack] = value之类的东西,或类似的东西。

修改
似乎人们将此解释为获取嵌套值,这不是我想要的。我想设置嵌套值。

询问

的人的示例数据
let stack = ['a', 'b', 'c', 'd'];
let object = {
    a: {
        b: {
            c: {
                d: 'Lorem'
            }
        }
    }
}

// Do something that sets object.a.b.c.d to 'Lorem ipsum' (that isn't reliant on the number of keys)

console.log(object);
/*
    {
        a: {
            b: {
                c: {
                    d: 'Lorem ipsum'
                }
            }
        }
    }
*/

1 个答案:

答案 0 :(得分:0)

事实证明,我不能像我认为的那样进行搜索,而且我也不理解JavaScript指针。

我设法找到this answer,这完全符合我的意愿。

简化和编辑版本以处理我需要的内容

let stack = ['a', 'b', 'c', 'd'];
let object = {
    a: {
        b: {
            c: {
                d: 'Lorem'
            }
        }
    }
};
let ref = object; // This becomes a pointer to `object`.

// Loop through all the keys and change `ref` so that it becomes a pointer to each nested value.
stack.slice(0, -1).forEach(key => ref = ref[key]);

// Sets the last given key.
ref[stack.slice(-1)[0]] = 'Lorem ipsum';

console.log(object);
/*
    {
        a: {
            b: {
                c: {
                    d: 'Lorem ipsum'
                }
            }
        }
    }
*/