次の方法で、いくつかのプロパティが構成オブジェクトに存在し、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
}
これは冗長すぎると思います。もっと良いパターンがあるかどうか知りたいです。おそらく次のようなもの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;
};
これらの名前の一部を配列に入れてループを使用することもできますが、それはそのままにしておきます。
で、オプションのチェーン(ES2020の新機能)、その最初の行は次のようになります。
const settings = options.JanrainAppSettings?.settings;
配列バージョンは次のようになります。
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]);
};
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);
};
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加