如何优雅地给多层嵌套的对象赋值?

作者站长头像
站长
· 阅读数 8

假设有个对象非常多层,要给某一层进行赋值,那么需要一层层判断是否为空,有没有优雅的写法?

示例

const a = {
  b: null
}

此时要给a对象的d属性赋值,就需要一层层判断非空才行...

a.b.c.d.e="hello";   // 如果没有判断,直接赋值报错
回复
1个回答
avatar
test
2024-06-23

根据不同的场景,常用的有两种方案

  1. 如果单纯判断属性存在才能赋值,可以用楼上提供的 可选链 这种方案

    if (a?.b?.c?.d?.e) {
     a.b.c.d.e="hello";
    }
  2. 如果不存在的情况也要创建并赋值,可以用 lodashset 函数

    import _ from 'lodash-es';
    
    _.set(a, 'b.c.d.e', 'hello')

    https://www.lodashjs.com/docs/lodash.set#_setobject-path-valueanswer image

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容