2016-04-04 172 views
1

有沒有辦法循環變量的聲明?只是一個循環來幫我聲明變量,所以我不必須做改變單調的工作變量有沒有辦法循環這個?

\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

不是一個聲明,但你可以把這些變量放在一個數組或其他東西。爲什麼你需要所有這些個人價值?這聽起來有點像[XY問題。](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) –

+0

我從表中獲取這些值,客戶將放入維度,然後生病使用這些生成價格報價 – PortaDoor

回答

4

的數量這不是編碼是一個正確的方式,只是做像,

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

現在你可以迭代數組heights來按照您的要求操縱值。

該代碼背後的邏輯是,querySelectorAll("input[id^=height]")將選擇id以文本height開頭的輸入元素。由於querySelectorAll的返回值是nodelist,因此在使用數組函數之前,必須將其轉換爲array。所以我們使用Array.from(nodelist)。這將爲我們創造一個陣列。之後,我們使用forEach遍歷返回的數組,並將所有元素的值推入數組heights

+1

太棒了!非常感謝! – PortaDoor

0

這似乎是一個很好的用例的對象:

var heights = {}; 

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

通常你把它們放在一個陣列。

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

當心這會給你一個孔的陣列,即heights[0]的開始有什麼也沒有。如果你使用這個迭代都不會有問題...

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

將元素添加到數組時,您應該使用['push'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/push)。否則,事情會變得很奇怪,你最終會得到一個帶有數字屬性的對象。 –

+0

@MikeC你正確的使用push,但是使用當前的方法'heights [i] = ..'你不會有數字屬性,而是常規的數組索引。 「長度」將在新的索引中自動更新。 –

+0

@DmitriPavlutin是和否。如果您有空隙,例如0到1之間,那麼「length」會更新,但會[錯誤](https://jsfiddle.net/sfu7v4rL/)。對於這個確切的問題並不重要,但我只是說這通常是最好的,以避免由於這種奇怪。 –

1

這幾乎總是你想要一個陣列的指示。事情是這樣的:

heights[1] 

雖然技術上因爲在JavaScript中你的窗口級變量是window對象的可轉位屬性:

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

然後你可以從陣列中的東西,如參考值,你可以用變量名自己做同樣的事情:

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

然後,你仍然可以使用你的原始變量:

height1 

雖然在保持窗口/全球範圍之外的東西的利益,維護陣列似乎有點清潔(和語義更合理的)。

0

也許它的時間來引入function

一般而言,一個功能是「子程序」,可以是稱爲由外部代碼(或在遞歸的情況下內部的)的功能。與程序本身一樣,函數由一系列聲明組成,稱爲函數體。值可以是傳遞給一個函數,並且函數將返回的一個值。

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

呼叫與希望id和使用它像一個變量。

getHeight('height1')