2010-11-22 3 views
4

私は変数または変数名のリストを配列に格納しています。私はループでそれらを使用したいですが、私はeval()を使用する必要はありません。これはどうすればいいですか?値を引用符付きの配列に格納する場合は、値を表示するために任意の式の右側にeval()を使用する必要があります。変数名だけを格納すると、実際の変数を格納していると思っていましたが、正しく動作していません。eval()を使用せずに配列の内容を変数として使う方法は?

$(data.xml).find('Question').each(function(){ 
    var answer_1 = $(this).find("Answers_1").text(); 
    var answer_2 = $(this).find("Answers_2").text(); 
    var answer_3 = $(this).find("Answers_3").text(); 
    var answer_4 = $(this).find("Answers_4").text(); 
    var theID = $(this).find("ID").text(); 
    var theBody = $(this).find("Body").text(); 

    var answerArray = new Array(); 

    answerArray = [answer_1,answer_2,answer_3,answer_4,theID,theBody] 

    for(x=0;x<=5;x++) { 
    testme = answerArray[x]; 

    alert("looking for = " + answerArray[x] + ", which is " + testme) 
    } 
}); 
+0

あなたは**#** Answers _N_を意味すると思います。 – SLaks

答えて

3

あなたは、配列の値そのものを置くことができます。

var answers = [ 
    $(this).find("Answers_1").text(), 
    $(this).find("Answers_2").text(), 
    $(this).find("Answers_3").text(), 
    $(this).find("Answers_4").text() 
]; 

for(x=0;x<=5;x++) { 
    alert("looking for = " + x + ", which is " + answers[x]) 
} 

EDIT:あるいは

var answers = $(this) 
    .find("Answers_1, Answers_2, Answers_3, Answers_4") 
    .map(function() { return $(this).text(); }) 
    .get(); 

あなたの答えは、共通のクラスを共有する場合、あなたはセレクタを変更することができます$(this).find('.AnswerClass')

あなたは変数名が必要な場合は、連想配列を使用することができます:他の人が述べたように、あなたは、配列やオブジェクトに変数を置くことができるならば、あなたはより多くのそれらにアクセスすることができるようになります

var thing = { 
    a: "Hello", 
    b: "World" 
}; 

var name = 'a'; 
alert(thing[name]); 
+0

JavaScriptには実際の連想配列はありませんが、オブジェクトを1つとして使用するだけです。これは、 "__proto"(Firefox)や他の特別な名前のようなキーを持っていると失敗する可能性があります。 – PleaseStand

+0

しかし、これらの2つのコードスニペットは同等ではありません。(サイドノートと同じように) –

+1

@idealmachine JavaScriptオブジェクトは連想配列ですが、基本的な連想配列を超えるいくつかの能力を備えていますが、 '' __proto ''をキーとして使用した結果、Firefoxで奇妙な動作が起こることはありません。詳しく教えてください。 – aaaaaaaaaaaa

0

をきれいに。

ただし、windowオブジェクトを介して変数にアクセスすることができます。もちろん

var one = 1; 
var two = 2; 
var three = 3; 

var varName = "one"; 

alert(window[varName]); // -> equivalent to: alert(one); 

、あなたはvarName変数に配列をループしながらなど、好きなように割り当てることができます。

1

このようにすると、配列を簡単に取り込むことができます。

var answers = new Array(); 
$("Answers_1, Answers_2, Answers_3, Answers_4", this).text(function(index, currentText) { 
    answers[index] = currentText; 
}); 
+0

@SLaks ...これでは、配列を移入するのが簡単にはなりません。 –

+0

あなたはより巧みにすることもできます。私の答えを見てください。 – SLaks

+0

@SLaks ...ええ、私がこれを書いた直後に私が来たのです。 –

関連する問題