我遇到了一个问题,我在下面有一个对象
a = {
b: {
c: 10
}
};
现在这是一个动态对象,在运行时可以是空的,比如这个a = {},我试图用ES6这样的简写符号来读c,比如const {b:{c}} = a;。但每次对象为空时都会收到错误。是否有一种方法我仍然可以将这种表示法用于空对象,例如在这种情况下获取未定义的c。
我知道我可以做一些像(a.b?a.b.c:undefined)这样的事情,但我只想知道这种做法。
答案 0 :(得分:3)
您可以为内部对象执行= {}
:
const a = {
b: {
c: 10
}
};
const f = ({b: {c} = {}}) => console.log(c)
f(a)
f({})
在这种情况下,如果对象为空,c
将变为未定义
答案 1 :(得分:2)
你可以做到
let a = {
b: {
c: 10
}
};
let result = a && a.b && a.b.c;
console.log(result);
如果属性存在,它将返回属性,否则返回undefined
答案 2 :(得分:0)
你可能想要一种通用的方法,对于浅层结构来说并不是很简洁,但可以节省你编译静态的条件序列。
function dive (obj, pz) {
return pz.reduce((acc, p) => {
return obj && p in acc ? acc[p] : undefined;
}, obj);
}
您可以将其与arbirary深度
一起使用console.log(dive({a:{b:{c:[10,11,12]}}}, ['a', 'b', 'c', 1]))
c.f。 this demo
答案 3 :(得分:0)
给lodash
一个镜头:
lodash.get(a, 'b.c', FALLBACK_DEFAULT_VALUE);