2016-04-04 38 views
1

Gibt es eine Möglichkeit, eine Deklaration einer Variablen zu wiederholen? nur eine Schleife um mir zu helfen, die Variablen zu erklären, damit ich die monotone Arbeit des Wandels tun nicht die Zahlen der VariablenGibt es eine Möglichkeit, dies zu loopen?

\t var height1 = document.getElementById('height1').value; 
 
\t var height2 = document.getElementById('height2').value; 
 
\t var height3 = document.getElementById('height3').value; 
 
\t var height4 = document.getElementById('height4').value; 
 
\t var height5 = document.getElementById('height5').value; 
 
\t var height6 = document.getElementById('height6').value; 
 
\t var height7 = document.getElementById('height7').value; 
 
\t var height8 = document.getElementById('height8').value; 
 
\t var height9 = document.getElementById('height9').value; 
 
\t var height10 = document.getElementById('height10').value; 
 
\t var height11 = document.getElementById('height11').value; 
 
\t var height12 = document.getElementById('height12').value; 
 
\t var height13 = document.getElementById('height13').value; 
 
\t var height14 = document.getElementById('height14').value; 
 
\t var height15 = document.getElementById('height15').value; 
 
\t var height16 = document.getElementById('height16').value;

+5

Keine Deklaration, aber Sie könnten diese Variablen in ein Array oder etwas setzen. Warum brauchen Sie all diese individuellen Werte? Das klingt ein bisschen wie ein [XY-Problem.] (Http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) –

+0

Ich bekomme diese Werte von einer Tabelle, wo ein Kunde wird in Dimensionen eingeben und dann diese verwenden, um ein Preisangebot zu generieren – PortaDoor

Antwort

4
müssen

Dies ist keine richtige Art und Weise, dass der Codierung, Just do wie,

var heights = []; 
Array.from(document.querySelectorAll("input[id^=height]")).forEach(function(itm){ 
    heights.push(itm.value); 
}); 

Und nun können Sie das Array iterieren heights die Werte wie pro Ihre Anforderung zu manipulieren.

Die Logik hinter dem Code ist, querySelectorAll("input[id^=height]") wird die Eingabeelemente auswählen, die ID hat beginnt mit dem Text height. Da der Rückgabewert von querySelectorAll ein nodelist ist, müssen wir es als array konvertieren, bevor wir Array-Funktionen darüber verwenden. So verwenden wir Array.from(nodelist). Das wird ein Array für uns ergeben. Danach durchlaufen wir das zurückgegebene Array unter Verwendung von forEach und schieben den Wert aller Elemente in das Array heights.

+1

großartig! ich danke dir sehr! – PortaDoor

0

Dies scheint ein guter Anwendungsfall für ein Objekt zu sein:

var heights = {}; 

for (var i = 1; i <= 16; i++) { 
    heights[i] = document.getElementById('height' + i).value; 
} 
0

Normalerweise würde man sie in einem Array setzen.

var heights = [] 
for (i = 1; i < 17; i++) { 
    heights[i] = document.getElementById('height' + i).value;; 
} 

Passen Sie das Sie ein Loch am Anfang des Arrays dh heights[0] hat nichts darin geben wird. Wenn Sie diese verwenden, um iterieren es keine Rolle, wird ...

for (var i in heights) { 
    alert(heights[i]); 
} 
+0

Sie sollten ['push'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/push) verwenden, wenn Sie Elemente zu einem Array hinzufügen. Andernfalls werden die Dinge merkwürdig und Sie haben im Endeffekt ein Objekt mit numerischen Eigenschaften. –

+0

@MikeC Sie haben Recht mit push, aber mit dem aktuellen Ansatz 'heights [i] = ..' haben Sie keine numerischen Eigenschaften, sondern regelmäßige Array-Indizes. Die 'Länge' wird automatisch bei einem neuen Index aktualisiert. –

+0

@DmitriPavlutin Ja und Nein. Die "Länge" wird aktualisiert, aber [es wird falsch sein] (https://jsfiddle.net/sfu7v4rL/), wenn Sie Lücken haben, wie zwischen 0 und 1, wie Sie hier haben. Nicht entscheidend für dieses genaue Problem, aber ich sage nur, dass es am besten ist, es aufgrund dieser Art von Verrücktheit zu vermeiden. –

1

Dies ist fast immer ein Zeichen, dass Sie ein Array wollen. Etwas wie folgt aus:

heights[1] 

Obwohl technisch da in JavaScript Fenster-Ebene Variablen sind Wendeeigenschaften des window Objekt:

var heights = []; 
for (var i = 1; i <= 16; i++) { 
    heights.push(document.getElementById('height' + i).value); 
} 

Dann Sie einen Wert aus dem Array mit so etwas wie referenzieren , Sie können im Wesentlichen dasselbe mit Variablennamen selbst tun:

for (var i = 1; i <= 16; i++) { 
    window['height' + i] = document.getElementById('height' + i).value; 
} 

Dann noch Sie Ihre ursprünglichen Variablen verwenden können:

height1 

Obwohl im Interesse der Dinge außerhalb des Fensters/globalen Bereich zu halten, um das Array Aufrechterhaltung scheint ein wenig sauberer (und semantisch sinnvoll).

0

möglicherweise seine Zeit function vorstellen:

Allgemeinen eine Funktion ist ein „Unterprogramm“, das genannten externen durch Code sein kann (oder intern im Fall der Rekursion) an die Funktion.Wie das Programm selbst besteht eine Funktion aus einer Folge von Anweisungen, die function body genannt wird. Werte können an eine Funktion übergeben werden, und die Funktion gibt einen Wert zurück.

function getHeight(id) { 
    return document.getElementById(id).value; 
} 

Anruf mit dem wollte id und es wie eine Variable verwenden.

getHeight('height1') 
Verwandte Themen