如何在 JavaScript 中使用循环函数声明变量 x1、x2、...、x10?
Posted
技术标签:
【中文标题】如何在 JavaScript 中使用循环函数声明变量 x1、x2、...、x10?【英文标题】:How do you declare variables x1, x2,...,x10 using a loop function in JavaScript? 【发布时间】:2016-05-24 03:17:08 【问题描述】:我正在尝试在 javascript 中运行以下代码来完成以下任务:声明一系列本质上具有相同名称但只是后缀不同的变量,后缀是一个整数,例如x1,x2,x3...等等。
我是 JavaScript 新手(事实上,我对编码世界完全陌生)。以下代码是我认为合乎逻辑的代码,但它不想按照我想要的方式执行。
for (i = 1; i<11; i++)
var x+i = 'variable'+i;
我还有其他想做的事……
例如,我做了一个如下所示的构造,然后继续创建自定义对象(student1、student2、student3)。我的最终目标是按顺序打印出学生的姓名和对他们成绩的评论。而不是必须为每个学生打印出这个函数,我想编写一个循环来提高这个过程的效率。然而,事实证明,试图做到这一点有点困难。代码如下:
var grade = function(grade)
switch (grade)
case "A": " could not do any better. Well done";
break;
case "C": " had average performance. There's room to improve.";
break;
case "F": ", an unfortunate result. Will have to try again next year.";
break;
default: ".";
break;
;
function Student(name, sgrade)
this.name = name;
this.grade = sgrade;
this.print = function()
console.log(this.name+grade(this.grade));
;
var student1 = new Student("Candice R.", "A");
var student2 = new Student("Robert K.", "C");
var student3 = new Student("Steven M.", "F");
for (i = 1; i<4; i++)
student+i.print();
/* student[i].print() also doesn't work */
有人可以告诉我我不完全理解的 JavaScript 的哪些逻辑不允许执行上述操作,还有其他方法吗?
【问题讨论】:
通常情况下,您不会。您使用数组来存储数据序列。 你能给我一个你可以用来做我想做的事情的代码示例吗?我上面有两个例子,你介意告诉我你将如何处理这两个例子吗?你只需要写出代码。 这真的不比理解 Array 在 Javascript 中的工作方式更难。如果你还不知道,那么这就是你下一次学习 Javascript。 感谢 jfriend00 的输入。感谢您的建设性帮助。 【参考方案1】:正如 jfriend00 所说,您正在寻找的 javascript 是数组。
每当您发现自己在变量名称中添加数字时,这应该表明您可以将它们放入数组中。
所以你可以替换这个:
var student1 = new Student("Candice R.", "A");
var student2 = new Student("Robert K.", "C");
var student3 = new Student("Steven M.", "F");
用这个:
var students = [];
students.push(new Student("Candice R.", "A"));
students.push(new Student("Robert K.", "C"));
students.push(new Student("Steven M.", "F"));
现在这三个学生一起存储在students
数组中。第一个学生在students[0]
访问,您的 for 循环应该能够轻松地对其进行迭代。
也许有更好的方法来定义这个学生数组,但这是对现有代码的非常接近的翻译。
【讨论】:
谢谢@crgk。我相信这是最有效的代码编写方式。【参考方案2】:变量的另一个名称是“标识符”。人们可以想到的每一种编程语言都将名称限制为特定的字符组合。为了: 变量 x+i;
解释器看到这一点,声明是 JavaScript 中标识符的无效字符集...因为它有 + 运算符。常见的限制不是以数字开头的变量名。第一个字符限制为 $/_/[A-Z],然后是数字混合...
您正在寻找的是使用数组或哈希表等数据结构。
var x =;
var array = [];
for (i = 1; i<11; i++)
//Add a new object property called x1...x2... to the variable x.
x["x" + i] = 'variable'+i;
//Add a new string to the Array
array.push('variable' + i);
//Iterate through the properties of the x object you just created
for(var k in x)
//retrieve the item by using x["x1"]
console.log(x[k]);
for(var i=0; i<array.length; i++)
//Retrieve array item by index (starts with zero)
console.log(array[i]);
【讨论】:
【参考方案3】:虽然您可以使用数组来存储变量并使用数字索引来访问它们,但如下所示:
var students = []; // create an array and add student objects to it
students[0] = new Student("Candice R.", "A");
students[1] = new Student("Robert K.", "C");
students[2] = new Student("Steven M.", "F");
for (i = 0; i < students.length; i++)
students[i].print();
如果您真的想使用名称“student1”、“student2”、“student3”,您可以执行以下操作:
var students = ; // create an empty object and add students as properties
students["student1"] = new Student("Candice R.", "A");
students["student2"] = new Student("Robert K.", "C");
students["student3"] = new Student("Steven M.", "F");
for (i = 1; i < 4; i++)
students["student" + i].print();
要回答在循环中创建此类变量的问题:
var x = ;
for (i = 1; i < 11; i++)
x['x' + i] = 'variable' + i;
【讨论】:
对象是一种有趣的方法。我喜欢它 - 对某些人来说可能更直观。 我在多年前做 OP 想要的事情时学到了这个技巧,除了当时我使用 @meteorite 建议的window
对象。但我不喜欢污染全局范围,所以我为这个答案做了一些修改。【参考方案4】:
用这个应该没问题:
for (i = 1; i<4; i++)
window['student'+i].print();
【讨论】:
最好只使用自己的数组而不是创建大量全局变量。 问题在于如何访问这些变量。 好的答案建议使用更好的技术,而不是仅仅回答一个字面上的问题,即如何进行糟糕的练习。 这取决于我的看法。在这种情况下,问题的作者很好奇为什么他/她的技术不起作用。因此,答案必须首先解决这个问题。然后,可以提出更好的/好的做法。 解释为什么var x+i = 'variable'+i;
不起作用(非法的 Javascript 语法)没有错,但你不这样做。相反,您建议使用正确的语法方法来实现错误的解决方案。我自己并没有对你投反对票,但我想我应该解释一下堆栈溢出本质上是对“最佳答案”的竞争,而最佳答案通常需要做的不仅仅是回答所问的问题。他们需要了解实际问题并为该问题提供最佳解决方案。以上是关于如何在 JavaScript 中使用循环函数声明变量 x1、x2、...、x10?的主要内容,如果未能解决你的问题,请参考以下文章