我正在尝试以以下方式验证配置对象上是否存在某些属性并且在 javascript 中具有值(真实?不一定像评论中指出的那样):
const verifyJanrainAppSettings = (options) => {
return options.JanrainAppSettings
&& options.JanrainAppSettings.settings.tokenUrl
&& options.JanrainAppSettings.settings.capture.clientId
&& options.JanrainAppSettings.settings.capture.appId
&& options.JanrainAppSettings.settings.capture.appDomain
&& options.JanrainAppSettings.settings.capture.captureServer
&& options.JanrainAppSettings.settings.httpLoadUrl
&& options.JanrainAppSettings.settings.httpsLoadUrl
}
Run Code Online (Sandbox Code Playgroud)
我觉得这太冗长了,我很好奇是否有更好的模式。也许像
if (['my', 'options'] in myObject) ...
您可以保留对 的引用settings,这会改善一些情况:
const verifyJanrainAppSettings = (options) => {
const settings = options.JanrainAppSettings && options.JanrainAppSettings.settings;
return settings &&
settings.tokenUrl &&
settings.capture && // ** This was missing in the question, but I think you need it
settings.capture.clientId &&
settings.capture.appId &&
settings.capture.appDomain &&
settings.capture.captureServer &&
settings.httpLoadUrl &&
settings.httpsLoadUrl;
};
Run Code Online (Sandbox Code Playgroud)
虽然您可以将其中一些名称放在数组中并使用循环,但我想我会保留它。
使用可选链接(ES2020 中的新功能),第一行可以是:
const settings = options.JanrainAppSettings?.settings;
Run Code Online (Sandbox Code Playgroud)
数组版本看起来像:
const settingsProps = "capture tokenUrl httpLoadUrl httpsLoadUrl".split(" ");
const captureProps = "clientId appId appDomain captureServer".split(" ");
const verifyJanrainAppSettings = (options) => {
const settings = options.JanrainAppSettings && options.JanrainAppSettings.settings;
return settings &&
settingsProps.every(prop => settings[prop]) &&
captureProps.every(prop => settings.capture[prop]);
};
Run Code Online (Sandbox Code Playgroud)
adiga 问了个好问题。如果你想要存在而不是真实(你的问题中有真实性),你会想要in(或为了自己的财产检查, hasOwnProperty )。例如:
const settingsProps = "capture tokenUrl httpLoadUrl httpsLoadUrl".split(" ");
const captureProps = "clientId appId appDomain captureServer".split(" ");
const verifyJanrainAppSettings = (options) => {
const settings = options.JanrainAppSettings && options.JanrainAppSettings.settings;
return settings &&
settingsProps.every(prop => prop in settings) &&
captureProps.every(prop => prop in settings.capture);
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1266 次 |
| 最近记录: |