JavaScript. Ссылка на переменную, которая создается динамически

1

У меня есть цикл for, создающий переменные "на лету". Как score0, score1, score2 и так далее. Первая часть работает как шарм. И 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;
}

Как ссылаться на созданную переменную внутри цикла?

Спасибо за кучу заранее.

Теги:
arrays
for-loop
variables

3 ответа

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

Вы просто ссылаетесь на него одинаково каждый раз.

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

Есть несколько вещей, которые не соответствуют вашему коду

  • Вы определяете такие переменные: score0, score1, score2 а затем пытаетесь ссылаться на массив score который никогда не создавался. score1 - это не то же самое, что score[1]
  • arr никогда не объявляется. Это вызовет проблемы, если вам когда-нибудь понадобится запустить код в строгом режиме
  • Вы определяете переменные, используя this. Поскольку вы не включили тег, который использует JS-структуру, я собираюсь предположить, что вы используете vanilla JS. Используя this для ссылки на объект Window потому что если вы когда-либо реорганизовали свой код и поместили его внутри функции, а затем запустили его в строгом режиме, вы столкнетесь с ошибками. Проверьте эту скрипку

Лучший способ сделать то, что вы хотите сделать, это примерно так:

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню