冗長になりすぎずに、オブジェクトに複数のプロパティが存在するかどうかを確認するにはどうすればよいですか?

awm:

次の方法で、いくつかのプロパティが構成オブジェクトに存在し、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) ...

TJクラウダー:

への参照を保持できます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]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ