2012-03-25 6 views
0

スクリプトのコーディング中に混乱した事実に遭遇しました。他の変数の値と等しい変数を見つけよう

別の変数の値と等しい変数を見つける方法はありますか。次に、その変数の値を取得します。

はここに例を示します

var result; 
var 1 = "john"; 
var 2 = "amy"; 
var 3 = "micheal"; 

var info = "1"; 

のvar情報が1に設定されている場合、スクリプトはその値johnを取得し、その値JOHNを持つ変数1を探します。次に、結果の値を "john"に設定します。 VAR情報が2に設定されている場合は、同じことのために

、スクリプトは、値amyを取得し、その値AMYを持つ変数2を探します。結果の値を "amy"に設定します。

など。

マイノーの変数の値は決定されません。ユーザイベントによって設定/決定される1,2、または3とすることができる。

P/S私はifとelseを使うことができますが、これがどのようにできるか知りたいのですが。 :)

どうすればいいですか?

+1

は、JSのものであっても、有効な変数名はありますか? – PeeHaa

+1

配列の使用を検討しましたか? – PeeHaa

答えて

4

は、おそらく非常に異なる何かをしたいです。

「ルックアップテーブル」と呼ばれるものが定義されており、namesに保存されています。次に、 "キー"(あなたの場合は1,2,3)を使って値を調べることができます。 names[info]を書くと、infoの内部が検索され、その値は上記の例では"1"になります。次に、"1"namesの中に探し、"1"の値が'john'であることを確認します。

私はこれがまさにあなたが尋ねてきたことではないことを知っていますが、それが助けになると思われます。このよう

+0

はいその答え!スクレイマーに感謝! – sm21guy

+0

数字だけを使用している場合、代わりに配列を使うことができます: 'var names = ['john'、 'amy'、 'michael'];'。 – Dennis

+0

配列を使用すると、最初の項目は自動的に '0'、2番目は' 1'、3番目は '2'などです。 – scraimer

0

どうすればいいですか?

できません。(出荷時)
変数には値のみが含まれていることはわかりません。

これを見て、あなた本当にはそれをしたい、としたいがスパゲッティコードでそれを支払う場合:
Get variable name. javascript "reflection"

または示唆されているように、変数値を取得するために@tvanfossonでevalを使用、これは危険で、推奨されなくなりました。


  • javascriptの変数が数字で始めることはできませんので注意してください。 var 1 = "john"; =>無効

javscript variables names rules

+0

ああ、私は参照してください。ありがとう。 – sm21guy

+0

オハイオ州大丈夫はそれに注意した。アドバイスをいただきありがとうございます。 – sm21guy

1

数値は、法的変数名ではありませんが、あなたがやりたい悪のビットを使用することができます。http://jsfiddle.net/2mAeh/2/(Safariのみでテスト)。 私はこれをお勧めしません。それは悪です。

var result; 
var a = "amy"; 
var b = "john"; 
var c = "micheal"; 
var info = "a"; 

var variable = eval("info"); // just to satisfy your requirement, same as info 
result = eval(variable); 

alert(variable + ' = ' + result); 

キーとしてあなたの「変数名」を使用して、マップとなり、これを処理するためのより良い方法。この場合、キーとして数値を使用できますが、他の例と同じキーを使用して一貫性を保ちます。

var result; 

var names = { 
    '1': 'john', 
    '2': 'amy', 
    '3': 'michael' 
}; 

var info = "1"; 
result = names[info]; 

resultに 'ジョン' を入れます:

var map = { "a": "Amy", "b" : "John", "c" : "micheal" }; 
var info = "a"; 

alert(info + ' = ' + map[info]); 
+0

'a'だけの価値はありません。 [this fiddle](http://jsfiddle.net/2mAeh/3/)を参照してください。 – gdoron

+0

@gdoron - updated – tvanfosson

+0

それでも、あなたは 'a'を変更させません。それは価値です。 [フィドル](http://jsfiddle.net/2mAeh/4/) – gdoron

0

function findVariableByName(info){// info is 1, 2, 3 

var result; 
this['1'] = "john"; 
this['2'] = "amy"; 
this['3'] = "micheal"; 
result = this[info]; 
alert(result); 
return result; 
} 

findVariableByName(1); 

更新:

あなたは以下のようにコードを変更し、それがグローバルスコープにある場合、

のvar結果ならば、 var 1 = "john"; var 2 = "amy"; var 3 = "micheal"; var info = "1"; あなたが行うことができます

var one = 'john'; 
var two = 'amy'; 
var three = 'micheal'; 
var info = 'one'; 

window[info] // gives you john 
0

あなたがオブジェクトを設定することによってこれを行う:

// Store your object 
var obj = {result: null, a: "john", b: "amy", c: "michael", info: "1"} 

// Iterate like so. 
    for(var key in obj) { 
     if(obj[key] == info){ 
      alert(key); 
     } 
    } 

私はこのコードをチェックしていないが、それは動作するはずです。がんばろう! window[var]使用

1

one = 'two'; 

two = '1'; 

alert(window[one]); // Alerts: 1 
+0

ああ、ホイスト!私が間違っているなら私を訂正してください。しかし、私はそれがグローバルスコープでしか機能せず、機能ではないと思います。 (偉大なポイントは+1!) – scraimer

+1

@scraimer。 「巻き上げ」は含まれていません。それは実際にグローバルな範囲でのみ機能します。 – gdoron

+1

ああ、そうです。そこに限界のビット。 – MichaelRushton

関連する問題