Javascript 在ES6速记符号中获取深层属性的最佳方法
我遇到了一个问题,在这里我有一个对象,如下所示Javascript 在ES6速记符号中获取深层属性的最佳方法,javascript,ecmascript-6,Javascript,Ecmascript 6,我遇到了一个问题,在这里我有一个对象,如下所示 a = { b: { c: 10 } }; 现在这是一个动态对象,在运行时可以是空的,就像这个a={},我试图用ES6速记符号来读取c,比如const{b:{c}}=a;。但每次对象为空时都会出现错误。有没有一种方法我仍然可以对空对象使用这种表示法,比如在这种情况下c的get undefined 我知道我可以做一些类似(a.b?a.b.c:未定义)的事情,但我只是想知道如何做。你可以对内部对象执行={}: const a={
a = {
b: {
c: 10
}
};
现在这是一个动态对象,在运行时可以是空的,就像这个a={},我试图用ES6速记符号来读取c,比如const{b:{c}}=a;。但每次对象为空时都会出现错误。有没有一种方法我仍然可以对空对象使用这种表示法,比如在这种情况下c的get undefined
我知道我可以做一些类似(a.b?a.b.c:未定义)的事情,但我只是想知道如何做。你可以对内部对象执行
={}
:
const a={
b:{
c:10
}
};
常量f=({b:{c}={})=>console.log(c)
f(a)
f({})
您可以对内部对象执行={}
:
const a={
b:{
c:10
}
};
常量f=({b:{c}={})=>console.log(c)
f(a)
f({})
你可以做什么
a={
b:{
c:10
}
};
设结果=a&&a.b&&a.b.c;
控制台日志(结果)代码>您可以执行以下操作
a={
b:{
c:10
}
};
设结果=a&&a.b&&a.b.c;
控制台日志(结果)代码>您可能需要一种通用方法,这种方法对于浅层结构来说并不十分简洁,但可以节省编译静态条件序列的时间
function dive (obj, pz) {
return pz.reduce((acc, p) => {
return obj && p in acc ? acc[p] : undefined;
}, obj);
}
你可以使用任意深度
console.log(dive({a:{b:{c:[10,11,12]}}}, ['a', 'b', 'c', 1]))
c、 f.您可能需要一种通用方法,这种方法对于浅层结构来说并不十分简洁,但可以节省编译静态条件序列的时间
function dive (obj, pz) {
return pz.reduce((acc, p) => {
return obj && p in acc ? acc[p] : undefined;
}, obj);
}
你可以使用任意深度
console.log(dive({a:{b:{c:[10,11,12]}}}, ['a', 'b', 'c', 1]))
c、 f.给洛达斯一枪:
lodash.get(a, 'b.c', FALLBACK_DEFAULT_VALUE);
给洛达斯一个镜头:
lodash.get(a, 'b.c', FALLBACK_DEFAULT_VALUE);
特别是看这个答案:特别是看这个答案:如果a
被保证是一个对象,你不需要检查它,因为它将永远是一个对象true@ferrybig不不不。OP在他的问题中说,不能保证a
不是null
/undefined
“现在这是一个动态对象,在运行时可以为空,比如a={}”“@marvel308是的,这肯定会给出结果&谢谢你的回答。但我的问题是如何以ES6的方式执行它?如果a
被保证是一个对象,那么您不需要检查它,因为它将始终是一个对象true@ferrybig不不不。OP在他的问题中说,不能保证a
不是null
/undefined
“现在这是一个动态对象,在运行时可以为空,比如a={}”“@marvel308是的,这肯定会给出结果&谢谢你的回答。但我的问题是,如何用ES6的方式来做呢?这样,即使我把值赋值给c:10,我也会得到未定义的c。是吗?@RanjeetGautam运行我的代码。定义c
时,返回值;否则未定义。是的,抱歉,我道歉,它确实运行,但这不是像在方法参数中设置默认属性一样吗?实际上,我想知道一种简单的速记方法,即使在b未定义的情况下也能捕获c。@RanjeetGautam在这种情况下,答案是:这样,即使我将值分配给c:10,我也会始终将c作为未定义的。是吗?@RanjeetGautam运行我的代码。定义c
时,返回值;否则未定义。是的,抱歉,我道歉,它确实运行,但这不是像在方法参数中设置默认属性一样吗?事实上,我想知道一种简单的速记方法来捕获c,即使b是未定义的。@RanjeetGautam在本例中,答案是:我使用的是ES6方式。感谢您的回答:)您可以选择香草ES6或安全简洁的Lodash。我用过这个,我一直在寻找ES6的方式。感谢您的回答:)您可以选择香草ES6或安全简洁的Lodash。