当前位置: 首页 > 知识库问答 >
问题:

javascript - 层层嵌套的对象,如何拿到最底层的值?

姚钊
2023-11-17

比如有对象

a: {    b: {        c: {            d: {                f: 123            }        }    }}

我只能按照顺序拿到数组['a', 'b', 'c', 'd', 'f']
如果想给f赋值,
只能

expression[0][expression[1][expression[2][expression[3][expression[4]....]]]] = 456

如果想要写上面这个表达式的通用函数,要怎么写。

共有3个答案

林俊英
2023-11-17
function setValue(object, path, value) {    let current = object;    for (let i = 0; i < path.length - 1; i++) {        current = current[path[i]];    }    current[path[path.length - 1]] = value;}let a = {    b: {        c: {            d: {                f: 123            }        }    }};let path = ['b', 'c', 'd', 'f'];setValue(a, path, 456);console.log(a.b.c.d.f); // 输出: 456
沈弘盛
2023-11-17

你直接看lodash的源码 https://www.lodashjs.com/docs/lodash.set
你项目里直接安装lodashjs也可以
或者直接去吧 set 方法的源代码拷贝到项目里就行了 没必要自己写

微生鸿轩
2023-11-17

这个问题可以通过使用 JavaScript 中的递归函数来解决。以下是一个可能的解决方案:

function accessNestedObject(obj, path, value) {    let keys = path.split('.');    let key = keys[0];    if (keys.length > 1) {        obj[key] = {};        accessNestedObject(obj[key], keys.slice(1).join('.'), value);    } else {        obj[key] = value;    }    return obj;}let expression = { a: { b: { c: { d: { f: 123 } } } } };accessNestedObject(expression, 'a.b.c.d.f', 456);console.log(expression); // { a: { b: { c: { d: { f: 456 } } } } }

这个 accessNestedObject 函数接受三个参数:一个对象,一个包含要访问的属性的路径,以及一个要设置的值。该函数将路径拆分成键的数组,然后逐个访问这些键,并在每个级别创建一个新的对象,如果路径中还有更多的键。当到达最深层的键时,该函数会设置给定的值。然后该函数返回修改后的对象。

在上面的例子中,我们首先创建了一个名为 expression 的对象,然后使用 accessNestedObject 函数将 f 属性的值设置为 456。然后我们打印出 expression,可以看到 f 的值已经被成功更改。

 类似资料: