嵌套javascript对象中的值检查(可能不存在)
有没有一种优雅简洁的方法可以避免在javascript中检查对象成员层次结构中的深层值嵌套javascript对象中的值检查(可能不存在),javascript,Javascript,有没有一种优雅简洁的方法可以避免在javascript中检查对象成员层次结构中的深层值 handlerInput.supportsDisplay = function() { return this.requestEnvelope.context && this.requestEnvelope.context.System && this.requestEnvelope.context.System.devi
handlerInput.supportsDisplay = function() {
return this.requestEnvelope.context &&
this.requestEnvelope.context.System &&
this.requestEnvelope.context.System.device &&
this.requestEnvelope.context.System.device.supportedInterfaces &&
this.requestEnvelope.context.System.device.supportedInterfaces.Display;
}
这是欺骗,但您可以使用Lodash的
.get
函数
_.get(validations, "path.to.nested.prop");
从文件中
获取对象路径处的值。如果解析的值未定义,则返回defaultValue
我编写了一个NPM模块,允许您通过字符串路径进行查询
这是一支密码笔 对于您的用例:
import resolver from 'js-path-resolver'
const info = resolver(handlerInput, 'requestEnvelope.context.System.device.supportedInterface.Display', {onError:'continue'})
const hasDisplay = info.exists
const display = info.get()
简而言之,您拆分字符串,然后尝试解析路径,一次解析一个字符串。实现这一点有各种各样的问题,例如转义点、处理数组索引等,因此使用库使生活变得更加轻松。在这个库中,您还可以设置和删除解析的路径。目前在纯JavaScript中没有简明的方法来实现这一点,除非您使用帮助函数或第三方库 在JavaScript中添加
?。
操作符(从2018年8月开始的第1阶段)是一个非常简单的过程,它可以完全满足您的需要
接受该建议后,您将能够使用?。
而不是
任何可能缺少属性的地方,因此您的代码将成为:
// careful: this syntax is not available yet
var hasDisplay = handlerInput.requestEnvelope.context?.System?.device?.supportedInterfaces?.Display
我猜他是在问他是否可以不用点(a.b.c.d.e.f.g.h)检查嵌套值,而你只是用lodash检查。我不同意。他想用一行字来做这件事。这就是你想要的。我不同意这是作弊。洛达斯图书馆让很多事情变得更加清晰和安全。如果没有LoDash,我不会去任何地方:)可能的重复作为StackOverflow的管理者,你应该投票以重复的方式结束,而不是对已经被问过的问题提供一个新的答案。