如何在 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?的主要内容,如果未能解决你的问题,请参考以下文章

如何将过程中的变量值传递给 Apex 中的 Javascript 函数

使用数组时,Javascript 向后循环变慢?

如何在javascript变量中获取变量值后面的C#代码?

ES6学习笔记

如何将变量值从循环A更新到另一个循环B - 在bash中

我可以在 JavaScript 的不同 for 循环中声明相同的变量两次吗? [复制]