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);
...但有十幾種變化。
添加回答
舉報