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

javascript jquery google-maps

140158 просмотра

6 ответа

Я работаю над скриптом ajax google maps и мне нужно создать динамические имена переменных в цикле for.

for (var i = 0; i < coords.length; ++i) {
    var marker+i = "some stuff";
}

То , что я хочу , чтобы это: marker0, marker1, marker2и так далее. и я думаю, что-то не так сmarker+i

Firebug дает мне это: missing ; before statement

Автор: Philipp Bergmann Источник Размещён: 30.07.2019 12:14

Ответы (6)


90 плюса

Решение

Используйте массив для этого.

var markers = [];
for (var i = 0; i < coords.length; ++i) {
    markers[i] = "some stuff";
}
Автор: JohnP Размещён: 24.11.2011 04:38

43 плюса

Я согласен, что обычно Arrayдля этого лучше использовать .

Однако это также может быть достигнуто в JavaScript, просто добавляя свойства в текущую область ( глобальную область , если код верхнего уровня; область функции , если внутри функции), просто используя this- который всегда ссылается на текущую область.

for (var i = 0; i < coords.length; ++i) {
    this["marker"+i] = "some stuff";
}

Позже вы можете извлечь сохраненные значения (если вы находитесь в той же области, в которой они были установлены):

var foo = this.marker0;
console.log(foo); // "some stuff"

Эта немного странная особенность JavaScript используется редко (по уважительной причине), но в определенных ситуациях она может быть полезна.

Автор: Todd Ditchendorf Размещён: 24.11.2011 04:40

14 плюса

Попробуй это

window['marker'+i] = "some stuff"; 
Автор: Safiq Размещён: 20.05.2013 08:47

4 плюса

Что касается итеративных имен переменных, мне нравится создавать динамические переменные, используя литералы Template . Каждый Том, Дик и Гарри используют стиль массива, что хорошо. Пока вы не работаете с массивами и динамическими переменными, о, мальчик! Перегрузка глаз кровью. Поскольку литералы шаблона имеют ограниченную поддержку прямо сейчас, eval()это даже другой вариант.

v0 = "Variable Naught";
v1 = "Variable One";

for(i = 0; i < 2; i++)
{//console.log(i) equivalent is console.log(`${i}`)
  dyV = eval(`v${i}`);
  console.log(`v${i}`); /* => v0;   v1;  */      
  console.log(dyV);  /* => Variable Naught; Variable One;  */
}

Когда я пробирался через API, я сделал этот небольшой фрагмент цикла, чтобы увидеть поведение в зависимости от того, что было сделано с литералами Template, по сравнению, скажем, с Ruby. Мне больше нравилось поведение Руби; необходимость использовать его eval()для получения значения отчасти хромает, когда вы привыкли получать его автоматически.

_0 = "My first variable"; //Primitive
_1 = {"key_0":"value_0"}; //Object
_2 = [{"key":"value"}]    //Array of Object(s)


for (i = 0; i < 3; i++)
{
  console.log(`_${i}`);           /*  var
                                   * =>   _0  _1  _2  */

  console.log(`"_${i}"`);         /*  var name in string  
                                   * => "_0"  "_1"  "_2"  */

  console.log(`_${i}` + `_${i}`); /*  concat var with var
                                   * => _0_0  _1_1  _2_2  */

  console.log(eval(`_${i}`));     /*  eval(var)
                                   * => My first variable
                                        Object {key_0: "value_0"}
                                        [Object]  */
}
Автор: kayleeFrye_onDeck Размещён: 20.04.2017 05:51

1 плюс

Вы можете использовать метод eval () для объявления динамических переменных. Но лучше использовать массив.

for (var i = 0; i < coords.length; ++i) {
    var str ="marker"+ i+" = undefined";
    eval(str);
}
Автор: Md Junaid Alam Размещён: 20.04.2018 02:53

-5 плюса

 var marker+i = "some stuff";

Можно интерпретировать так: создайте переменную с именем marker (undefined); затем добавьте к i; затем попытаться присвоить значение результату выражения, что невозможно . Что говорит Firebug, так это: var marker; я = «кое-что»; это то, что firebug ожидает запятую после маркера и до меня; var является оператором и не (по-видимому) принимает выражения. Не очень хорошее объяснение, но я надеюсь, что это поможет.

Автор: Alfgaar Размещён: 24.11.2012 06:52
Вопросы из категории :
32x32