猿问

仅使用属性访问器(点符号或括号符号),如何直接设置未定义的嵌套属性?

在 javascript 对象中,是否可以仅使用属性访问器(例如点符号或括号符号)来设置未定义嵌套键的属性值?


Lodash 的 _.set 函数(和 TJ Crowder 的回答)和我想要的差不多,但是代码的结构不同,即_.set(state, "some.future.key", "baz").


是否有任何库可以让我直接设置值,即state.some.future.key = "baz"?


理想情况下,我希望状态自动呈现以下形状:


state = {

    some: {

        future: {

            key: "baz"

        }

    }

}


墨色风雨
浏览 138回答 3
3回答

Qyouu

您只需创建任何缺失的东西。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);...但有十几种变化。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答