2017-03-23 4 views
0

Dies ist, was ich zur Zeit habe, aber ich kann nicht v (i) so wie v1 verhalten. Was mache ich falsch? Ich habe auch das Stück darunter versucht, das auch nicht funktioniert hat.Zähler in Variablenname verwenden

var x = "v" + i; 
alert(x); 

Mein Hauptproblem ist folgendes:

var v1 = document.getElementById("thing1").innerHTML; // = 100 
var v2 = document.getElementById("thing2").innerHTML; // = 150 
var v3 = document.getElementById("thing3").innerHTML; // = 200 

for (i = 0; i < 4; i++) { 
    if (v(i) != ""){ 
     alert(v(i)); 
     } 
} 

Vielen Dank im Voraus :)

+1

warum nicht ein Array oder ein Objekt dafür verwenden? –

+0

Sie rufen v als Funktion auf, wenn Sie Klammern hinter es setzen. –

+0

@NinaScholz Können Sie mir erklären, was Sie meinen? Ich bin ein absoluter Neuling, sorry. – TakeoGFX

Antwort

1

Was Sie versuchen zu tun ist, nicht leicht zu bewerkstelligen. Sie müssten die Variable dem Fensterobjekt zuweisen und von dort aus drucken.

Eine viel bessere Lösung ist Ihr eigenes Objekt oder ein Array zu verwenden, um dies zu handhaben:

var v1 = document.getElementById("thing1").innerHTML; // = 100 
var v2 = document.getElementById("thing2").innerHTML; // = 150 
var v3 = document.getElementById("thing3").innerHTML; // = 200 
var array = [v1,v2,v3]; 
for (i = 0; i < 4; i++) { 
    if (array[i] != ""){ 
     alert(array[i]); 
     } 
} 
0

Sie könnten ein Array verwenden, ohne sie einzelne Variablen und Schleife.

var array = [ 
 
     '100', // document.getElementById("thing1").innerHTML, 
 
     '150', // document.getElementById("thing2").innerHTML, 
 
     '200' // document.getElementById("thing3").innerHTML 
 
    ], 
 
    i; 
 

 
for (i = 0; i < array.length; i++) { 
 
    if (array[i] !== "") { 
 
     console.log(array[i]); 
 
    } 
 
}

Wenn Sie einige Schlüssel benötigen, können Sie ein Objekt verwenden.

var object = { 
 
     v1: '150', // document.getElementById("thing1").innerHTML, 
 
     v2: '200', // document.getElementById("thing2").innerHTML, 
 
     v3: '250', // document.getElementById("thing3").innerHTML 
 
    }, 
 
    i; 
 

 
for (i = 1; i <= 3; i++) { 
 
    if (object['v' + i] !== "") { 
 
     console.log(object['v' + i]); 
 
    } 
 
}

0

Alle globalen Variablen sind Eigenschaften von window Objekt Sie window['v'+ i] oder this['v'+ i] verwenden könnte, sie zu schaffen. Aber das ist ein sehr schlechtes Muster, wenn man stattdessen ein Objekt betrachtet.

0

Sie versuchen, einen interpolierten Variablennamen zu erhalten, was in JavaScript nicht möglich ist, wie Sie es tun.

Sie können dies mit this['v'+i] oder window['v'+i] tun, die beide schlechte Ideen im globalen Bereich sind.

v(i) eigentlich bedeutet: Lauffunktion v(...) mit Parametern i

Wenn ich Ihren Beispielcode in leicht schreiben würde Javascript zu verstehen, ich mit dieser kommen würde:

for(var i = 1; i <= 4; i++) 
{ 
    var html = document.getElementById('thing'+i).innerHTML; 
    alert(html); 
} 

Wenn Sie möchten, Ihre Werte in einem Array, so dass Sie nicht denselben Code 6 Mal schreiben:

var ids = ['thing1','thing2','thing3','thing4']; 

// es5 
    var values = []; 
    for(var i = 0; i < ids.length; i++) 
    { 
    var html = document.getElementById(ids[i]).innerHTML; 
    values.push(html); 
    } 
    // values now contains all the values of the elements 

// OR es 6 
    var values = ids.map(function(id) { return document.getElementById(id).innerHTML; }); 
    // or 
    var values = ids.map(id => document.getElementById(id).innerHTML);