假设有个对象非常多层,要给某一层进行赋值,那么需要一层层判断是否为空,有没有优雅的写法?
示例
const a = { b: null}
此时要给a对象的d属性赋值,就需要一层层判断非空才行...
a.b.c.d.e="hello"; // 如果没有判断,直接赋值报错
if(a?.b?.c?.d?.e) a.b.c.d.e="hello"
Proxy
function factory(obj) { return new Proxy(obj, { get(target, prop) { if (target.hasOwnProperty(prop) && typeof target[prop] === "object") { return factory(target[prop]); } else { return factory({}); } }, set(target, prop, value) { if (target.hasOwnProperty(prop)) { Reflect.set(...arguments); } else { } }, });}
根据不同的场景,常用的有两种方案
如果单纯判断属性存在才能赋值,可以用楼上提供的 可选链
这种方案
if (a?.b?.c?.d?.e) { a.b.c.d.e="hello";}
如果不存在的情况也要创建并赋值,可以用 lodash
的 set
函数
import _ from 'lodash-es';_.set(a, 'b.c.d.e', 'hello')
https://www.lodashjs.com/docs/lodash.set#_setobject-path-value
在传递嵌套的对象时,拿到的是字符串 '[object Object]', 而不是原始的对象. 除了使用 oops: (JSON.stringify(oops)) 还有更合适的方案传参吗?
比如有对象 我只能按照顺序拿到数组['a', 'b', 'c', 'd', 'f'] 如果想给f赋值, 只能 如果想要写上面这个表达式的通用函数,要怎么写。
[ {"fields":{"itemname":"aaa","qty":100},"billno":"a001"}, {"fields":{"itemname":"bbb","qty":300},"billno":"a002"}, {"fields":{"itemname":"ccc","qty":200},"billno":"a004"}, {"fields":{"itemname":"eee"
问题内容: 我有基于json的数据结构,其中包含嵌套对象。为了访问特定的数据元素,我一直将对对象属性的引用链接在一起。例如: 如果未定义b或bc,则将失败并显示错误。但是,我想获得一个值(如果存在的话),否则只是未定义。无需检查链中每个值是否存在的最佳方法是什么? 我想尽可能地保持这种方法,所以我不必添加大量的辅助方法,例如: 要么 我也想尝试避免使用try / catch构造,因为这不是错误,因
问题内容: 这是为这篇文章准备的一个通用的虚构示例。考虑6节课 是外部类,假设它为数据库表保留一个对象。 在此,没有呼叫或或。我的目标是外部范围不需要的内部对象的示例。 是内取和操作的数据,因此需要,和。 包含和需要,和。 若要让事情变得有趣,它需要一个Logger。我的示例现在深了3个作用域。 **我的问题很简单,如果您有一个对象3(或更多)作用域,而外部作用域上的对象没有调用该对象,那么如何将
我有一门java课 在上面的场景中,示例具有子示例,这又是示例列表。此嵌套可以是 n 级。我想实现的是有一个示例列表,即扁平化上面的对象并将所有示例收集到最终列表中(收集所有n级示例)。一个明显的方法是递归。在Java中有什么方法可以更有效地实现它。我尝试了一些java 8概念,但它们不符合要求。