【问题标题】:JavaScript. Reference a variable that is created dynamicallyJavaScript。引用动态创建的变量
【发布时间】:2017-06-09 13:22:52
【问题描述】:

我有一个 for 循环动态创建变量。比如 score0、score1、score2 等等。第一部分就像一个魅力。并且 score0、score1、score2 等按照我在这一行中的预期创建:

this["score"+i] = 8;

变量已创建。在循环之外,我可以记录 score[2] 并且它可以工作。 但是。

我似乎不知道如何在 for 循环中引用创建的变量。我尝试了一些不同的选择

选项 1:

arr = [1,2,3];

for (var i = 0; i < arr.length; i++) {
  this["score"+i] = 8;
  this["scorePercentage"+i] = this.score[i] * 10 / 100;
}


选项 2:

arr = [1,2,3];

for (var i = 0; i < arr.length; i++) {
  this["score"+i] = 8;
  this["scorePercentage"+i] = score[i] * 10 / 100;
}

如何在循环内引用创建的变量?

提前致谢。

【问题讨论】:

  • 为什么要创建这样的变量而不是使用数组或对象?
  • 确实如此。为此使用数组并在将来为自己省去一些麻烦。它也会表现得更好。
  • 像这样创建编号变量是 JavaScript 中的反模式。而不是询问这个特定的代码,可以描述你试图解决的具体问题吗? – 例如,“我如何根据一组值计算分数和百分比?” – 显示输入和预期输出
  • 访问它的方式与您定义它的方式相同:this["scorePercentage"+i] = this["score"+i] * 10 / 100; }
  • @aorfevre 这与保罗 5 分钟多前(下)写的有什么不同?

标签: javascript arrays variables for-loop


【解决方案1】:

您只需每次都以相同的方式引用它。

var arr = [1,2,3];

for (var i = 0; i < arr.length; i++) {
  this["score"+i] = 8;
  this["scorePercentage"+i] = this["score"+i] * 10 / 100;
}

【讨论】:

    【解决方案2】:

    为什么不使用具有所需属性的对象数组。

    var array = [1, 2, 3],
        objects = array.map(function (value) {
            return {
                score: 8,
                percent: 8 * 10 % 100
            };
        });
        
    console.log(objects);

    或者直接使用里面有对象的对象。

    var array = [1, 2, 3],
        object = {};
    
    array.forEach(function (value) {
        object[value] = {
            score: 8,
            percent: 8 * 10 % 100
        };
    });
        
    console.log(object);

    【讨论】:

      【解决方案3】:

      你的代码有几个问题

      • 您像这样定义变量:score0score1score2,然后您尝试引用从未创建的 score 数组。 score1score[1] 不一样
      • arr 从未声明过。如果您必须在严格模式下运行代码,那将导致问题
      • 您正在使用this 定义变量。由于您没有包含使用 JS 框架的标签,我将假设您使用的是 vanilla JS。使用this 来引用Window 对象,因为如果您重构代码并将其放入函数中,然后在严格模式下运行它,您将遇到错误。检查this fiddle

      做你想做的最好的方法是这样的:

      var arr = [1,2,3];
      var score = [];
      var scorePercentage = [];
      for (var i = 0; i < arr.length; i++) {
        score.push(8);
        scorePercentage.push( score[i] * 10 / 100 );
      }
      

      【讨论】:

        猜你喜欢
        • 2012-11-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-09
        • 2012-01-21
        相关资源
        最近更新 更多