2014-03-04 2 views
1

두 개의 다른 배열의 내용을 보유하는 "thisIsMyContainerArray"라는 다차원 배열이 있습니다.
내가하려고하는 일은 "thisIsMyContainerArray"배열의 각 항목을 확인하고 각 항목 (이 경우 두 개의 다른 배열)을 해당 배열에서 콘솔에 개별적으로 기록하고 매 5 초마다 기록하는 것입니다. 이것은, 내가 이것을보고 내 원하는 결과를 필요로한다다차원 배열의 배열을 다른 함수에 setInterval을 사용하여 전달할 수 없습니다.

["val1", "val2", "val3", "val4"] 
["val1", "val2", "val3", "val4"] 

:

지금까지 나는 다음과 같은 코드가 있습니다

var thisIsMyContainerArray = new Array(); 
var thisIsMyArray1 = new Array('val1', 'val2', 'val3', 'val4'); 
var thisIsMyArray2 = new Array('valA', 'valB', 'valC', 'valD'); 
thisIsMyContainerArray.push(thisIsMyArray1, thisIsMyArray2); 
for (var i = 0; i < thisIsMyContainerArray.length; i++) { 
    var t1 = setInterval(tester,5000); 
    function tester() { 
     console.log(thisIsMyContainerArray[i]); 
    } 
} 

을 그리고 난 항상 내 콘솔에 다음과 같은 출력, 5 초마다 얻을 이전에 언급 한 출력 대신 콘솔에서 :

["val1", "val2", "val3", "val4"] 
["valA", "valB", "valC", "valD"] 

내가 몇 시간 동안 계속 붙들어 줬기 때문에 도움이 될 것입니다. 지금 나는 그것을 이해할 수 없다. :(테스터 함수에 전달하려고했지만 "정의되지 않은"것으로 나타납니다.)

+0

을 당신은'에서는 setInterval을 (변경할 수)'에'에서는 setInterval (function() {console.log (thisIsMyContainterArray [i]);});'? 당신이 가진 오류를 해결할 수 있습니다. – sourRaspberri

+0

또는 변수 'i'를 전달하십시오. – sourRaspberri

+0

첫 번째 주석에 답장하면 "Uncaught ReferenceError : thisIsMyContainterArray가 정의되지 않았습니다."오류가 발생합니다. – Magali

답변

1

이 시도 - 당신이 순간에없는 경우이 작업을 얻을 수 있어야합니다 ..

var thisIsMyContainerArray = new Array(); 
var thisIsMyArray1 = new Array('val1', 'val2', 'val3', 'val4'); 
var thisIsMyArray2 = new Array('valA', 'valB', 'valC', 'valD'); 
thisIsMyContainerArray.push(thisIsMyArray1, thisIsMyArray2); 

var t1 = setInterval(tester,5000); 

function tester() 
{ 
    for (var i = 0; i < thisIsMyContainerArray.length; i++) 
    {   
     console.log(thisIsMyContainerArray[i]);   
    }  
} 
+0

감사합니다. 두 번째 루프를 제거하면 원하는 출력을 얻습니다. :) – Magali

+0

네, JS에 대해 혼란스러워했습니다, 미안 해요! 대답을 정정했다. –

1

깨끗한 환경에서이 코드를 테스트하면 undefined이 출력되므로 모두 i 변수가 아니기 때문일 수 있습니다. 전달되거나 전달 범위에 포함되지 않습니다. 기본적으로 전역 네임 스페이스의 어딘가에 사용 된 0으로 설정된 i 변수가 있습니다.

또한 더 많은 작업을 수행하고 있는지 잘 모르겠습니다. t1 변수이지만 루프마다 재설정되므로 불량 구간이 발생합니다.


로깅이 후 당신의 모든 경우

, 나는 이렇게 줄이 그냥 간단한 예 경우

var thisIsMyContainerArray = new Array(); 
var thisIsMyArray1 = new Array('val1', 'val2', 'val3', 'val4'); 
var thisIsMyArray2 = new Array('valA', 'valB', 'valC', 'valD'); 
thisIsMyContainerArray.push(thisIsMyArray1, thisIsMyArray2); 
var t1 = setInterval(tester,5000); 
function tester() { 
    for (var i = 0; i < thisIsMyContainerArray.length; i++) { 
     console.log(thisIsMyContainerArray[i]); 
    } 
} 

을하고 루프 및 각 배열에 대해 여러 간격을 설정하여 원래 구조를 필요로 시도 이 :

var thisIsMyContainerArray = new Array(); 
var thisIsMyArray1 = new Array('val1', 'val2', 'val3', 'val4'); 
var thisIsMyArray2 = new Array('valA', 'valB', 'valC', 'valD'); 
thisIsMyContainerArray.push(thisIsMyArray1, thisIsMyArray2); 
function tester(index) { 
    console.log(thisIsMyContainerArray[index]); 
    setTimeout(function() { 
     tester(index); 
    }, 5000); 
} 
for (var i = 0; i < thisIsMyContainerArray.length; i++) { 
    tester(i); 
} 
+0

이것을 전달하고 클로저 범위에 포함하려면 어떻게해야합니까? – Magali

+1

@Magali 개인적으로, 필자는 '테스터'기능을 루프 외부로 옮기고, 함수의 끝에 인덱스 매개 변수와'setTimeout'을 부여한 다음 루프 내에서 함수를 호출합니다. 유스 케이스가이 로깅 이상이 아니라면 '테스터'기능에서 for 루프를 이동할 수 있습니다. 그리고 나는 글로벌 네임 스페이스에서 변수 'i'를 찾아 냈습니다. – gpgekko

관련 문제