假设有个对象非常多层,要给某一层进行赋值,那么需要一层层判断是否为空,有没有优雅的写法?
示例
const a = {
b: null
}
此时要给a对象的d属性赋值,就需要一层层判断非空才行...
a.b.c.d.e="hello"; // 如果没有判断,直接赋值报错
假设有个对象非常多层,要给某一层进行赋值,那么需要一层层判断是否为空,有没有优雅的写法?
示例
const a = {
b: null
}
此时要给a对象的d属性赋值,就需要一层层判断非空才行...
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 {
}
},
});
}
8 回答4.7k 阅读✓ 已解决
6 回答3.4k 阅读✓ 已解决
5 回答2.8k 阅读✓ 已解决
5 回答6.3k 阅读✓ 已解决
4 回答2.3k 阅读✓ 已解决
4 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
根据不同的场景,常用的有两种方案
如果单纯判断属性存在才能赋值,可以用楼上提供的
可选链
这种方案如果不存在的情况也要创建并赋值,可以用
lodash
的set
函数https://www.lodashjs.com/docs/lodash.set#_setobject-path-value