- ベストアンサー
JScript 連想配列の動的宣言
JScriptです。 連想配列でmap?の様に宣言する場合、 定数で無いと正しく処理されない様なのですが、 動的に宣言する方法はないでしょうか? var mymap = []; // 引数は予測できない為動的 var myarg = WScript.Arguments; mymap = ['myarg(0)': 0]; WScript.Echo(mymap['myarg(0)']); // 結果は空白である
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
'myarg(0)'は、「myarg(0)」という文字列リテラルなので定数です。 なので、 var mymap = {'myarg(0)': 0}; WScript.Echo(mymap['myarg(0)']); で0を出力することができます。 ただ、質問文を見る限りkeyに使いたかったのは 'myarg(0)'ではなくmyarg(0)のようなので、 その場合は以下のように書けば良いです。 var mymap = {}; var myarg = WScript.Arguments; mymap[myarg(0)] = 0; WScript.Echo(mymap[myarg(0)]);
その他の回答 (4)
- amanojaku1
- ベストアンサー率54% (265/488)
>回答No.3 amanojaku1 >もしかして、WScript.Argumentsの配列要素の個々に連想配列の任意のキーを付けて連想配列に格納したいと言う事でしょうか? >例えばWScript.Argumentsの配列要素が2つ有ったとしてWScript.Arguments(0)の配列要素には「'myarg(0)'」と言うキー、WScript.Arguments(1)の配列要素には「'myarg(1)'」と言うキーを付けて連想配列に格納したいと言う事でしょうか? もし、そうなら下記のようになります。 var mymap = new Array(); for (i = 0; i < WScript.Arguments.length; i++){ key = "myarg("+i+")"; mymap[key] = WScript.Arguments(i); WScript.Echo("<"+key+">:"+mymap[key]); }
お礼
ご回答頂き有難う御座います。 〉WScript.Argumentsの配列要素の個々に連想配列の任意のキーを付けて連想配列に格納したいと言う事でしょうか? myargで取得した引数をキーにして、別の値を格納したいと言うことです。 自分が最初書いた例だと期待するべき戻り値は 0 です 受け取った引数をキーにする感じです。
- amanojaku1
- ベストアンサー率54% (265/488)
>引数を渡したmyargで配列の番地を設定したい >と言う質問なのですがその御回答で間違いないでしょうか? 意味が良く分かりません。 もしかして、WScript.Argumentsの配列要素の個々に連想配列の任意のキーを付けて連想配列に格納したいと言う事でしょうか? 例えばWScript.Argumentsの配列要素が2つ有ったとしてWScript.Arguments(0)の配列要素には「'myarg(0)'」と言うキー、WScript.Arguments(1)の配列要素には「'myarg(1)'」と言うキーを付けて連想配列に格納したいと言う事でしょうか?
- amanojaku1
- ベストアンサー率54% (265/488)
>回答No.1 amanojaku1 >「mymap['myarg(0)'](0)」はゼロ・スタートです、ゼロが1個目です。 分かりにくいかもしれないので加筆します。 「WScript.Echo(mymap['myarg(0)'](0))」の「mymap['myarg(0)'](0)」はゼロ・スタートです、ゼロが1個目です、1個目だけ表示しています。
- amanojaku1
- ベストアンサー率54% (265/488)
WSH(Windows Script Host)のJavaScriptですね、WSHは良く知りませんが…。 (実行する場合)コマンドラインでパラメーターを記述する必要があります。 「mymap['myarg(0)'](0)」はゼロ・スタートです、ゼロが1個目です。 「for (i = 0; i < mymap['myarg(0)'].length; i++)」はゼロからスタートして、個数分を表示します」。 mymap = {"myarg(0)":WScript.Arguments}; WScript.Echo(mymap['myarg(0)'](0)); for (i = 0; i < mymap['myarg(0)'].length; i++){ WScript.Echo("No.<"+i+">:"+mymap['myarg(0)'](i)); }
お礼
御回答頂き有難う御座います。 こちらの勘違いで無ければ質問の意図が伝わらなかった様です。 引数を渡したmyargの値を取得したいのではなく 引数を渡したmyargで配列の番地を設定したい と言う質問なのですがその御回答で間違いないでしょうか?
お礼
あーなるほど var mymap = {'myarg(0)': 0}; を mymap = ['myarg(0)': 0]; と中括弧と大括弧を間違えた為意図した動作にならなかったんですね。 修正した所上手くいきました。ありがとうございました。 意図としては'myarg(0)'です。