何度やっても PHP と JavaScript で混同してしまう事があって、これは断じて年のせいではない!ので覚え書き。
PHP には「可変変数」という便利な機能がある。
「任意の文字列を変数名に利用する」というもの。
今、仕事で久しぶりに JavaScript のコードを組んでいる。
その中で、「これは切り出した文字列を配列名にした方が便利かも」と思い立ち、「そんな機能があったよなー」と曖昧な記憶を辿りに辿って、3日目にしてようやく「可変変数」を思い出した次第。
結局 JavaScript には「可変変数」が無いわけですが、色々と試したところ「配列名」を使って代替できた。
代替案
だけど、次のようにはできない。
これでは「可変変数」っぽくない。
代替案 本命
JavaScript では配列もオブジェクトなので、上記のように
JavaScript では何でもかんでもオブジェクトなので、上記のように
はい、という事なんですが、どうでしょう?
逐一文字列を処理させる事になるので、何度も利用する物であれば、変数にぶち込んであげたほうが処理も早くなるのでは、と思う。
もっと良い方法があったり、間違いがあったら、教えてください。
PHP には「可変変数」という便利な機能がある。
「任意の文字列を変数名に利用する」というもの。
今、仕事で久しぶりに JavaScript のコードを組んでいる。
その中で、「これは切り出した文字列を配列名にした方が便利かも」と思い立ち、「そんな機能があったよなー」と曖昧な記憶を辿りに辿って、3日目にしてようやく「可変変数」を思い出した次第。
結局 JavaScript には「可変変数」が無いわけですが、色々と試したところ「配列名」を使って代替できた。
代替案
var arr_A_B_C = new Array('hoge');
var str_B = '_B_';
eval('arr_A' + str_B + 'C')[0] = 'fuga';
alert(arr_A_B_C[0]);
// → 「fuga」のダイアログが出る。
eval って色々と使えるんだなあ、と関心。だけど、次のようにはできない。
var str_B = '_B_';
var eval('arr_A' + str_B + 'C') = new Array('hoge');
alert(arr_A_B_C[0]);
// → エラー
なので、最初から使う変数名 (配列名) が分かってないと使えない。これでは「可変変数」っぽくない。
代替案 本命
var obj_TMP = new Object();
var str_B = '_B_';
obj_TMP['A' + str_B + 'C'] = new Array('hoge');
alert(obj_TMP['A_B_C'][0]);
// → 「hoge」のダイアログが出る。
「多次元配列」&「連想配列」という事ですね。JavaScript では配列もオブジェクトなので、上記のように
new Object() じゃなくて、new Array() でも、どっちでもいいんですけどね。JavaScript では何でもかんでもオブジェクトなので、上記のように
new Object() の場合は「オブジェクト」&「プロパティ」という考え方でも良いし、配列に固執したい場合は new Array() にしたり、と何でもOKなんですけどね。はい、という事なんですが、どうでしょう?
逐一文字列を処理させる事になるので、何度も利用する物であれば、変数にぶち込んであげたほうが処理も早くなるのでは、と思う。
もっと良い方法があったり、間違いがあったら、教えてください。
コメント