JavaScriptでオブジェクトのプロパティとして変数の値を呼び出す

user11805667

このアプリのコマンドハンドラーを作成しています。このハンドラーは、ネストされたJSONキー/値のリストを、コマンドを実行するための一種のディレクトリとして使用します。(ファイルの構造はまだ進行中です):

{
    "commands": {
        "category1": {
            "command1_c1": {
                "alias": ["c1c1alias1", "c1c1alias2", "c1c1alias3", "c1c1alias4"]
            },
            "command2_c1": {
                "alias": ["c1c2alias1", "c1c2alias2"]
            },
            "command3_c1": {
                "alias": ["c1c3alias1", "c1c3alias2"]
            }
        },
        "category2": {
            "command1_c2": {
                "alias": ["c2c1alias1", "c2c1alias2"]
            },
            "command2_c2": {
                "alias": ["c2c2alias1"]
            }
        }
    }
}

このJSONファイルは私のJavaScriptファイルで「必須」です:

const jsonCommands = require("./commands/commands.json");

私はこのコードを書きました。このコードは、このように各レベルを反復処理し、ユーザーの入力に基づいてコマンドを見つけることになっています。

for (var listedCategory in jsonCommands.commands) {
    console.log(`listedCategory: ${listedCategory}`);
    for (var listedCommand in jsonCommands.commands.listedCategory) {
        console.log(`listedCommand: ${listedCommand}`);
        if (listedCommand === userCommand) {
            console.log(`success in finding command ${userCommand}`);
        }
    }
}

上記のこのコードは、2番目のfor-inループでは何もログに記録しません上記のコードの戻り値は次のとおりです(エラーはスローされません)。

listedCategory: lookup
listedCategory: other

これはコードの別のバージョンです。これは同様のことを行いますが、alias配列にもアクセスします。ただし、現時点では配列値が返されるとは思えません。

Object.keys(jsonCommands).forEach(category => {
    console.log(`Category: ${category}`);
    Object.keys(jsonCommands.category).forEach(command => {
        console.log(`Command: ${command}`);
        if (command === userCommand) {
            console.log(`A command was recognized: \`${userCommand}\``);
        } else {
            Object.keys(jsonCommands.category.command).forEach(aliasCommand => {
                console.log(`aliasCommand: ${aliasCommand}`);
                if (aliasCommand === userCommand) {
                    console.log(`A command alias was recognized: \`${userCommand}\``);
                }
            });
        }
    });
});

上記のこのコードも機能しません。これはスローされるエラーです:

Object.keys(jsonCommands.category).forEach(command => {
TypeError: Cannot convert undefined or null to object

ここで、各例に1つずつ、合計2つの問題があります。(ただし、他に何を試したかを示すために、主に2番目の例を投稿しました。)最初のコード例の問題は、変数名に割り当てられている変数名ではなく、JSONキーとして変数名にアクセスしようとしている可能性があることです。ステートメントなどのコールバックによりjsonCommands.commands.listedCategory、戻り値が未定義になります。そのため、反復されません。

2番目のコード例で何が起こっているのかわかりません。スローされたエラーの理由は似ていると思いますが、Object.keysに未定義の値にアクセスするように指示しています。

ただし、そのバグが修正されれば、最初の解決策は問題なく機能すると確信しています。listedCategoryコールバックで宣言された変数の値をJSONオブジェクトのプロパティとして使用するにはどうすればよいですか?

これが重複した質問である場合はお詫び申し上げます。

コードマニアック

TL:DR;

[]変数を使用してプロパティにアクセスする場合に使用する必要があります

let jsonCommands = {"commands": {"category1": {"command1_c1": {"alias": ["c1c1alias1", "c1c1alias2", "c1c1alias3", "c1c1alias4"]},"command2_c1": {"alias": ["c1c2alias1", "c1c2alias2"]},"command3_c1": {"alias": ["c1c3alias1", "c1c3alias2"]}},"category2": {"command1_c2": {"alias": ["c2c1alias1", "c2c1alias2"]},"command2_c2": {"alias": ["c2c2alias1"]}}}}

let userCommand = 'command2_c2'

for (var listedCategory in jsonCommands.commands) {
    console.log(`listedCategory: ${listedCategory}`);
    for (var listedCommand in jsonCommands.commands[listedCategory]) {
        console.log(`listedCommand: ${listedCommand}`);
        if (listedCommand === userCommand) {
            console.log(`success in finding command ${userCommand}`);
        }
    }
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Javascript-オブジェクトのプロパティとして外部関数を呼び出す

分類Dev

関数を呼び出してJavascriptのオブジェクトプロパティを定義する

分類Dev

Javascriptの関数呼び出しでオブジェクトにプロパティを追加する

分類Dev

変数をプロパティオブジェクトとして呼び出す方法

分類Dev

プロパティなしでオブジェクトを呼び出すためのデフォルト値

分類Dev

非同期関数呼び出し中にプロパティ値が変更されると、JavaScriptのオブジェクトのプロパティ値はどうなりますか?

分類Dev

オブジェクトのプロパティまたは関数呼び出しに特定の値を返すにはどうすればよいですか?

分類Dev

同じオブジェクト内の変数としてプロパティ値を再利用します

分類Dev

onclickでプロパティオブジェクト関数を呼び出す

分類Dev

変数値をオブジェクトプロパティとして参照および評価する方法

分類Dev

JSが変数によってオブジェクトプロパティを呼び出す

分類Dev

オブジェクトプロパティに格納されているJavascript関数を呼び出す

分類Dev

モックオブジェクトのオブジェクトプロパティのメソッドを呼び出すと、NullPointerExceptionが発生します

分類Dev

引数変数を介してオブジェクトのプロパティの値を更新する方法

分類Dev

参照ではなく値で新しいオブジェクトのオブジェクト関数とプロパティをコピーします-javascript

分類Dev

オブジェクト値を取得する方法。どのプロパティが変数値と等しいか

分類Dev

オブジェクトのプロパティとして値を返す

分類Dev

匿名オブジェクトの関数プロパティを動的に呼び出す方法は?

分類Dev

別のオブジェクトのプロパティである関数を関数に渡して、JavaScriptで呼び出すにはどうすればよいですか?

分類Dev

Laravel Blade:オブジェクトのプロパティを呼び出すとNULLになります

分類Dev

メソッドを変数に格納してから呼び出すと、コンテキストオブジェクトがグローバルウィンドウオブジェクトに変わるのはなぜですか?

分類Dev

JavaScriptで変数をオブジェクトのプロパティと同じように参照として設定する方法はありますか?

分類Dev

javascriptオブジェクトの初期化でプロパティとして数値を使用する利点は何ですか?

分類Dev

JavaScriptを使用して変数オブジェクトのプロパティにアクセスする

分類Dev

オブジェクトリテラルのプロパティ名として変数* name *を使用する

分類Dev

javascriptのパラメータとしての変数オブジェクトのプロパティ名?

分類Dev

NSubstitute-呼び出し元オブジェクトのプロパティを設定する

分類Dev

ディレクティブのパラメータとしてオブジェクト内の関数を呼び出す

分類Dev

AutoDataAttributeの具体的なオブジェクト作成ロジックは、すべてのプロパティゲッターを1回呼び出します

Related 関連記事

  1. 1

    Javascript-オブジェクトのプロパティとして外部関数を呼び出す

  2. 2

    関数を呼び出してJavascriptのオブジェクトプロパティを定義する

  3. 3

    Javascriptの関数呼び出しでオブジェクトにプロパティを追加する

  4. 4

    変数をプロパティオブジェクトとして呼び出す方法

  5. 5

    プロパティなしでオブジェクトを呼び出すためのデフォルト値

  6. 6

    非同期関数呼び出し中にプロパティ値が変更されると、JavaScriptのオブジェクトのプロパティ値はどうなりますか?

  7. 7

    オブジェクトのプロパティまたは関数呼び出しに特定の値を返すにはどうすればよいですか?

  8. 8

    同じオブジェクト内の変数としてプロパティ値を再利用します

  9. 9

    onclickでプロパティオブジェクト関数を呼び出す

  10. 10

    変数値をオブジェクトプロパティとして参照および評価する方法

  11. 11

    JSが変数によってオブジェクトプロパティを呼び出す

  12. 12

    オブジェクトプロパティに格納されているJavascript関数を呼び出す

  13. 13

    モックオブジェクトのオブジェクトプロパティのメソッドを呼び出すと、NullPointerExceptionが発生します

  14. 14

    引数変数を介してオブジェクトのプロパティの値を更新する方法

  15. 15

    参照ではなく値で新しいオブジェクトのオブジェクト関数とプロパティをコピーします-javascript

  16. 16

    オブジェクト値を取得する方法。どのプロパティが変数値と等しいか

  17. 17

    オブジェクトのプロパティとして値を返す

  18. 18

    匿名オブジェクトの関数プロパティを動的に呼び出す方法は?

  19. 19

    別のオブジェクトのプロパティである関数を関数に渡して、JavaScriptで呼び出すにはどうすればよいですか?

  20. 20

    Laravel Blade:オブジェクトのプロパティを呼び出すとNULLになります

  21. 21

    メソッドを変数に格納してから呼び出すと、コンテキストオブジェクトがグローバルウィンドウオブジェクトに変わるのはなぜですか?

  22. 22

    JavaScriptで変数をオブジェクトのプロパティと同じように参照として設定する方法はありますか?

  23. 23

    javascriptオブジェクトの初期化でプロパティとして数値を使用する利点は何ですか?

  24. 24

    JavaScriptを使用して変数オブジェクトのプロパティにアクセスする

  25. 25

    オブジェクトリテラルのプロパティ名として変数* name *を使用する

  26. 26

    javascriptのパラメータとしての変数オブジェクトのプロパティ名?

  27. 27

    NSubstitute-呼び出し元オブジェクトのプロパティを設定する

  28. 28

    ディレクティブのパラメータとしてオブジェクト内の関数を呼び出す

  29. 29

    AutoDataAttributeの具体的なオブジェクト作成ロジックは、すべてのプロパティゲッターを1回呼び出します

ホットタグ

アーカイブ