sourcecode

루프 내에서 동적 변수 이름을 만들려면 어떻게 해야 합니까?

codebag 2023. 9. 15. 20:58
반응형

루프 내에서 동적 변수 이름을 만들려면 어떻게 해야 합니까?

저는 ajax google maps 스크립트를 작업하고 있는데 for loop에서 동적 변수 이름을 만들어야 합니다.

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

제가 원하는 것은:marker0,marker1,marker2이런 식으로. 그리고 뭔가 잘못된 게 있는 것 같아요.marker+i

파이어버그는 나에게 이것을 줍니다.missing ; before statement

배열을 사용합니다.

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

나는 일반적으로 a를 사용하는 것이 더 바람직하다는 것에 동의합니다.Array이 일로

그러나 이는 현재 범위에 속성(상위 코드인 경우 전역 범위, 함수 범위 내인 경우 함수 범위)을 단순히 사용하여 자바스크립트로 구현할 수도 있습니다.this– 항상 현재 범위를 참조합니다.

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

나중에 저장된 값을 검색할 수 있습니다(설정 당시와 동일한 범위 내에 있는 경우).

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

자바스크립트의 이 약간 이상한 기능은 (충분한 이유로) 거의 사용되지 않지만 특정 상황에서는 유용할 수 있습니다.

이거 먹어봐요.

window['marker'+i] = "some stuff"; 

반복 변수 이름에 대해서는 템플릿 리터럴을 사용하여 동적 변수를 만드는 것을 좋아합니다.모든 톰, 딕, 해리는 배열 스타일을 사용하는데, 그건 괜찮습니다.배열과 동적 변수를 다룰 때까지, 오, 이런!눈에서 피가 많이 나요.템플릿 리터럴은 현재 지원이 제한되어 있기 때문에 또 다른 옵션입니다.

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를 해킹할 때 템플릿 리터럴을 사용하여 수행한 작업에 따라 루비와 비교하여 동작을 확인하기 위해 이 작은 루프 스니펫을 만들었습니다.나는 루비의 행동이 더 마음에 들었습니다; 사용할 필요가 있습니다.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]  */
}

eval() 메서드를 사용하여 동적 변수를 선언할 수 있습니다.배열을 사용하는 것이 더 좋습니다.

for (var i = 0; i < coords.length; ++i) {
    var str ="marker"+ i+" = undefined";
    eval(str);
}

이 dynamicVar에서 인덱스에 따라 arr의 값/요소를 넣을 동적 변수 "ele[i]"를 생성합니다.ele은 초기 단계에서 공백이므로 배열 "ele"에서 "arr"의 요소를 복사합니다.

function dynamicVar(){
            var arr = ['a','b','c'];
            var ele = [];
            for (var i = 0; i < arr.length; ++i) {
                ele[i] = arr[i];
 ]               console.log(ele[i]);
            }
        }
        
        dynamicVar();
var marker  = [];
for ( var i = 0; i < 6; i++) {               
     marker[i]='Hello'+i;                    
}
console.log(marker);
alert(marker);
 var marker+i = "some stuff";

다음과 같이 해석할 수 있습니다. 마커(정의되지 않음)라는 이름의 변수를 만든 다음 i에 추가한 다음 식의 결과에 값을 할당합니다. 불가능합니다.파이어버그는 다음과 같이 말합니다. var marker; i = 'some things'; 이것은 파이어버그가 마커 뒤와 i 앞에 쉼표를 예상하는 것입니다. var는 문이고 (잘못된) 식을 받아들이지 않습니다.좋은 설명은 아니지만 도움이 되었으면 좋겠습니다.

언급URL : https://stackoverflow.com/questions/8260156/how-do-i-create-dynamic-variable-names-inside-a-loop

반응형