3 回答
TA贡献1786条经验 获得超11个赞
您只需创建任何缺失的东西。
const state = {
foo: "bar"
};
if (!state.some) {
state.some = {};
}
if (!state.some.future) {
state.some.future = {};
}
state.some.future.key = "baz";
console.log(state);
如果有很多内联代码,您可以为自己提供一个函数来完成它。如果你想这样做,这个问题和这个问题的答案应该会让你朝着正确的方向前进。一个简单的版本:
function setDeep(obj, path, value) {
if (typeof path === "string") {
path = path.split(".");
}
const final = path[path.length - 1];
path = path.slice(0, -1);
for (const entry of path) {
if (!obj[entry]) {
obj = obj[entry] = {};
} else {
obj = obj[entry];
}
}
return obj[final] = value;
}
const state = {
foo: "bar"
};
setDeep(state, "some.future.key", "baz");
// Or: setDeep(state, ["some", "future", "key"], "baz");
console.log(state);
...但有十几种变化。
添加回答
举报