2010-11-22 16 views
4

Dizide saklı değişkenler veya değişken adları var. Bunları bir döngüde kullanmak istiyorum, ancak eval()'u kullanmak zorunda kalmak istemiyorum. Bunu nasıl yaparım? Değerleri bir dizide tırnak içine kaydedersem, değeri oluşturmak için herhangi bir denklemin sağ tarafında eval() kullanmam gerekir. Değişken adını saklarsam, gerçek değişkeni saklayacağımı sanıyordum, ama doğru çalışmıyor.Değişken olarak dizi içeriğini eval() kullanılmadan nasıl kullanılır?

$(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

Demek istediğim ** # ** Cevaplar _N_. – SLaks

cevap

3

Bir dizideki değerleri kendileri koyabilirsiniz:

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: Hatta

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

cevaplarınız ortak sınıf paylaşıyorsanız, seçici değiştirebilir $(this).find('.AnswerClass').

değişken isimleri gerekiyorsa, bir ortak dizi kullanabilirsiniz: Diğerleri de söylediğim gibi bir dizi veya bir nesne değişkenleri koyabilirsiniz eğer

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

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

JavaScript gerçek ilişkilendirme dizilerine sahip değil; Bir nesneyi sadece bir tane kullanıyor olursun. "__proto" (Firefox'ta) ve diğer özel adlar gibi anahtarlarınız varsa bu başarısız olabilir. – PleaseStand

+0

Ancak, bu iki kod snippet'leri eşdeğer değildir (yalnızca bir sidenote gibi) –

+1

@idealmachine, bir JavaScript nesnesi ilişkisel bir dizidir, temel bir ilişkilendirici dizinin ötesinde bazı yeteneklere sahiptir, ancak bu daha az bir şey yapmaz. Firefox'ta '__proto '' anahtarını kullanmaktan kaynaklanan garip davranışlar görmüyorum, detaylara dikkat etmeyi ister misiniz? – aaaaaaaaaaaa

0

, daha bunlara erişmek mümkün olacak temiz.

Ancak, window nesnesi aracılığıyla değişkenleri erişebilirsiniz:

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

var varName = "one"; 

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

Tabii ki, bir dizi döngü sırasında dahil gibi varName değişkene herhangi bir şekilde atayabilirsiniz.

1

Bu, dizinin doldurulmasını kolaylaştırır.

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

@SLaks ... bu dizinin doldurulması daha kolay olmaz. –

+0

Hatta zeki olabilirsiniz. Cevabımı gör. – SLaks

+0

@SLaks ... evet bunu yazdıktan hemen sonra bana geldi. –

İlgili konular