У меня есть цикл 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;
}
Как ссылаться на созданную переменную внутри цикла?
Спасибо за кучу заранее.
Почему бы не использовать массив объектов с требуемыми свойствами.
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);
Вы просто ссылаетесь на него одинаково каждый раз.
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;
}
Есть несколько вещей, которые не соответствуют вашему коду
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 );
}