2016-04-04 141 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')