动态变量名Javascript

动态变量名Javascript,javascript,html,variables,dynamic,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 h

我一直听说应该如何使用数组和对象来实现动态变量名。我不知道如何让这个工作与我目前的项目

我需要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); 
然后,它获取hole1、hole2、hole3、hole4和hole5,以及它们的总和,并将它们全部放入my 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;
[1, 2, 1.5]

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

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

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 holePrompts=[];
对于(变量i=0;i<5;i++){
HoleCompts[i]=提示('输入洞'+(i+1)+'分数:');
}
var totalScore=0;
对于(变量i=0;i<5;i++){
totalScore+=parseFloat(HoleCompts[i]);
}
document.getElementById('totalScore')。value=parseInt(totalScore);
对于(var i=0;i<5;i++){
document.getElementById('hole'+(i+1)).value=holeCompts[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);
var totalScore=0;
对于(变量i=0;i<5;i++){
分数=提示('输入孔'+(i+1)+'分数:');
document.getElementById('hole'+(i+1)).value=score;
totalScore+=parseFloat(分数);
}
document.getElementById('totalScore')。value=parseInt(totalScore);
快速补充说明,因为您是JavaScript新手。当您使用数组并使用
i
打印消息时。注意括号:
“输入孔”+(i+1)+“分数:”


如果您这样键入:
“输入孔”+i+1+“分数:”
它将输出输入孔01分数:、输入孔11分数:、输入孔21分数,依此类推。这是因为操作的顺序。将数字添加到字符串时,它将转换为字符并连接

使用对象文字表示法:

……等等。然后,您可以稍后参照该对象,如下所示:

var firstTwoHoles = scoreByHole.hole1 + scoreByHole.hole2

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

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);
在最后一步中,我们使用for循环对数组中的所有内容求和并输出结果。像PHP这样的其他编程语言有一个
array\u sum()
函数,它与for循环现在的功能相同。但是javascript没有包含这样的函数

为了处理数组中的单个值,我们可以使用一个键。在数组中,键是以零开始的整数。所以这个数组中的第一个值得到了键0。第二个,键1

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

在这里你可以找到小提琴:


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

您实际上不必使用阵列来实现这一点,只需使用以下代码:

window['your_variable_name']
它将返回该变量的内容

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

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

您可以使用eval

这是一个例子:

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

let i = 1;

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

这是一个XY问题。使用数组,而不是单独的变量。对不起,我对JS有点陌生,没有对数组做太多的工作。所以只需将条目存储在数组中,进行迭代并将其放入框中,然后重复?可能值得一读:如果您使用数字索引,为什么
holePrompts={}
而不是
holePrompts=[]
window['your_variable_name']
let a1 = "string 1";
let a2 = "string 2";

let i = 1;

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