JavaScript的。引用动态创建的变量

时间:2017-06-09 13:22:52

标签: javascript arrays variables for-loop

我有一个for循环创建变量。像得分0,得分1,得分2等等。第一部分就像一个魅力。并且得分score0,score1,score2等就像我期望的那样创建:

this["score"+i] = 8;

创建变量。在循环之外我可以记录得分[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;
}

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

提前致谢了。

3 个答案:

答案 0 :(得分:2)

你每次都以同样的方式引用它。

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;
}

答案 1 :(得分:1)

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

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);

答案 2 :(得分:1)

您的代码有几个问题

  • 您可以定义如下变量: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 );
}