Javascript 如何优雅地检查连续对象的存在
有没有办法写得更优雅一些Javascript 如何优雅地检查连续对象的存在,javascript,Javascript,有没有办法写得更优雅一些 if ("a" in obj && "b" in obj.a && "c" in obj.a.b) 而不是检查对象的每个阶段是否存在 如果我做了If(obj.a.b中的“c”)如果a或b不存在,这将产生错误。我总是发现lodash和函数非常强大,您可以访问对象中的深度嵌套值,而无需大量代码来检查路径是否存在 例如: constobj={a:{b:{c:42}}; 如果(uu.
if ("a" in obj && "b" in obj.a && "c" in obj.a.b)
而不是检查对象的每个阶段是否存在
如果我做了
If(obj.a.b中的“c”)
如果a
或b
不存在,这将产生错误。我总是发现lodash和函数非常强大,您可以访问对象中的深度嵌套值,而无需大量代码来检查路径是否存在
例如:
constobj={a:{b:{c:42}};
如果(uu.has(obj,“a.b.c”)){
log(“路径存在”);
}
//安全访问,如果路径不存在,将返回未定义。。。
log(“路径值:”,j.get(obj,“a.b.c”)代码>
deep helper函数
此curried函数可以通过使用pulldeep函数的第一个参数来确定属性是否存在。Old way
新方式
如果您的运行时支持它,您可以使用可选的链接if(obj?.a?.b???{})中的(“c”)
function pluckDeep(key) {
return function(obj) {
return key.split('.').reduce((accum, key) => {
return accum[key]
}, obj);
}
}
const obj = { a: { b: { c: 42 }}};
if (pluckDeep('a.b.c')(obj)) {
// do something
}
if (obj.a && obj.a.b && obj.a.b.c) {
// do something
}
if (obj.a?.b?.c) {
// do something
}