我有一个函数可以获得一个任意大小的数组,以及一个值。该函数应将给定的键应用于具有嵌套对象的对象,然后将最后一个键设置为给定的值。然后它将对象存储在其他地方。
当密钥数量已知且一致(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'
}
}
}
}
*/
答案 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'
}
}
}
}
*/