动态变量名称Javascript

时间:2014-07-26 01:50:05

标签: javascript html variables dynamic

我一直听说如何使用数组和对象来完成动态变量名称。我不确定如何使用我当前的项目。

我需要 html框的动态变量名称,输入分数的动态名称 。如何使用我当前的代码完成此操作?

以下是每个玩家的5个独立分数中每个分数的Javascript提示。

var hole1 = prompt("Enter Hole 1 score:");
var hole2 = prompt("Enter Hole 2 score:");
var hole3 = prompt("Enter Hole 3 score:");
var hole4 = prompt("Enter Hole 4 score:");
var hole5 = prompt("Enter Hole 5 score:");

下面是声明一个变量存储所有6个框保持分数和分数。

var makeScoreBoxes ='<input type ="text" placeholder="Hole 1" id="hole1" /> <input type ="text" placeholder="Hole 2" id="hole2" /> <input type ="text" placeholder="Hole 3" id="hole3" /> <input type ="text" placeholder="Hole 4" id="hole4" /> <input type ="text" placeholder="Hole 5" id="hole5" /> <input type ="text" placeholder="Total Score" id="totalScore" />'
newdiv.innerHTML = makeScoreBoxes;
ni.appendChild(newdiv); 

然后将它们全部添加到这里并存储totalScore变量的总数:

totalScore = parseInt(parseFloat(hole1) +
             parseFloat(hole2) +
             parseFloat(hole3) +
             parseFloat(hole4) +
             parseFloat(hole5));

然后它需要hole1,hole2,hole3,hole4和hole5,以及它们的总和,并将它们全部放在我的index.html输入框中,如下所示:

addTotal = document.getElementById('totalScore').value=totalScore;
addhole1 = document.getElementById('hole1').value=hole1;
addhole2 = document.getElementById('hole2').value=hole2;
addhole3 = document.getElementById('hole3').value=hole3;
addhole4 = document.getElementById('hole4').value=hole4;
addhole5 = document.getElementById('hole5').value=hole5;

hole1,hole2,hole3,hole4,hole5,都是为了提示用户,询问他们的分数是什么。然后将它们全部放在html输入框中,所有输入框都与变量hole1,hole2,hole3,holr4和hole5具有相同的id。由于有多个人输入分数,如何为每个html box id和javascript提示变量生成/迭代动态名称,以便我可以在尽可能多的方框中添加尽可能多的分数?

5 个答案:

答案 0 :(得分:1)

您可以将所有代码简化为:

var holePrompts = [];
for (var i = 0; i < 5; i++) {
    holePrompts[i] = prompt('Enter Hole ' + (i + 1) + ' score:');
}

var totalScore = 0;
for (var i = 0; i < 5; i++) {
    totalScore += parseFloat(holePrompts[i]);
}

document.getElementById('totalScore').value = parseInt(totalScore);
for (var i = 0; i < 5; i++) {    
    document.getElementById('hole' + (i + 1) ).value = holePrompts[i];
}

如果您不对分数进行任何其他操作,则更短:

var totalScore = 0;
for (var i = 0; i < 5; i++) {
    score = prompt('Enter Hole ' + (i + 1) + ' score:');
    document.getElementById('hole' + (i + 1) ).value = score;
    totalScore += parseFloat(score);
}
document.getElementById('totalScore').value = parseInt(totalScore);

快速注意,因为您不熟悉JavaScript。当您使用数组并使用i打印消息时。注意括号:'Enter Hole ' + (i + 1) + ' score:'

如果您输入如下:'Enter Hole ' + i + 1 + ' score:'它将输出输入孔01得分:输入孔11得分:输入孔21分,依此类推。这是因为操作顺序。将数字添加到字符串时,它将转换为字符并连接。

答案 1 :(得分:0)

使用对象文字符号:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects

var scoreByHole = new Object();
scoreByHole['hole1'] = document.getElementById('hole1').value;
scoreByHole['hole2'] = document.getElementById('hole2').value;

......等等。然后您可以像以后一样引用该对象:

var firstTwoHoles = scoreByHole.hole1 + scoreByHole.hole2

答案 2 :(得分:0)

我写了一个小jsfiddle来解释数组是如何工作的:

var data = [];
var enteredValue = 1;
var i = 0;
while (enteredValue) {
    enteredValue = prompt("Enter score of hole " + ++i);
    if (enteredValue) {
        data.push(parseFloat(enteredValue));
    }
}

var sum = 0;
for (var i = 0; i < data.length; i++) {
    sum = sum + parseFloat(data[i]);
}
alert("Entered score of " + data.length + " holes. Sum is: " + sum);

首先,我们在变量[]中创建一个新数组data。接下来我们有一个while循环,每次输入一个值时都会重复。如果您按取消或未输入任何内容,则会取消while循环。

在while循环内部,我们触发提示,如果它包含值,我们将此值推送到数组data。如果我们输入一些值,则数组可能如下所示:

[1, 2, 1.5]

在最后一步中,我们使用for循环对数组中的所有内容求和并输出结果。其他编程语言(如PHP)具有array_sum()函数,其功能与for循环现在的功能相同。但是javascript没有包含这种功能。

要解决数组中的单个值,我们可以使用密钥。在数组中,键是以零开头的整数。所以这个数组中的第一个值得到了密钥0.第二个,密钥1,......

for循环为我们做了这一点,从零开始,以低于1的数字结束,然后是数组的长度。因为在上面的示例中,数组包含3个值。 data.length将是3.但是最后一项的关键是2(因为它开始计为零,而不是一个)。

在这里你会找到小提琴:http://jsfiddle.net/fXgv4/1/

我希望这有助于您了解将来如何使用数组。

答案 3 :(得分:0)

您实际上不必使用数组来完成这项工作,只需使用以下代码:

window['your_variable_name']

它将返回该变量的内容。

您也可以使用此方法设置变量。

答案 4 :(得分:0)

如果需要“ let”而不是“ var”,则无法从窗口对象获取它。

您可以使用评估

这是一个示例:

let a1 = "string 1";
let a2 = "string 2";

let i = 1;

console.log(eval(`a${i}`));// output: "string 1"
相关问题