2013-04-12 2 views
0

크롬 확장 프로그램을 만들고 정렬 된 배열로 이상한 결과를 얻고 있습니다. "timearray"및 "timearrayorig"라는 두 개의 전역 배열이 있습니다 (timearray는 timearrayorig의 정렬 된 버전 임). 함수에서 나는 timearrayorig에 많은 값을 설정 한 다음 전체 배열을 timearray에 복사하고 timearray를 정렬합니다. 웬일인지, 이것도 timearrayorig를 정렬합니다. 누군가가 왜 그런지 설명 할 수 있다면 크게 감사하겠습니다. 연결된 배열을 만드는 배열 정렬?

for (var i = 0; i < triparray.length; i++) { 
    for (var j = 0; j < trainsfeed.length; j++) { 
     if (trainsfeed[j].getElementsByTagName('Trip')[0].childNodes[0].nodeValue == triparray[i]) { 
      if (timearrayorig.length < i + 1 || timearrayorig[i] > Number(trainsfeed[j].getElementsByTagName('Scheduled')[0].childNodes[0].nodeValue)) { 
       timearrayorig.push(Number(trainsfeed[j].getElementsByTagName('Scheduled')[0].childNodes[0].nodeValue)); 
      } 
     } 
    } 
} 
timearray = timearrayorig; 
//timearray.sort(); 

(trainsfeed 메시지와 triparray 의해 분리 된 XML의 무리는 "트립"필드. timearrayorig 및 timearray 모든 다른 값리스트의 요소로부터 triparray의 각 요소의 초기 배이다

이 스크립트를 실행하고 디버그 콘솔에서 timearrayorig 및 timearray 값을 찾으면 [1365801720, 1365801180, 1365801600, 1365802800, 1365800940]와 같이 동일합니다. 그러나 내가 Timearray를 분류하면 둘 다 [1365800940, 1365801180, 1365801600, 1365801720, 1365802800]이됩니다.

+0

배열은 당신이 배열을 시도 복사 할 경우, 당신은 단지 배열의 참조를 할당 timearray하는 timearrayorig를 할당 할 때 그렇게 참조 형이다 슬라이스 방법 – Givi

답변

1
timearray = timearrayorig; 

이하지 않습니다 사본 배열; 동일한 배열을 참조하는 두 번째 변수를 만듭니다. 배열이 하나뿐이므로 배열을 정렬하면 두 변수에 모두 영향을 미칩니다. copy the array에 수행 : 자세한 내용은 참조

var timearray = timearrayorig.slice(); 

: Copying array by value in JavaScript합니다.

+0

많은 감사. 그거야. – csander

+0

0을 생략하고 slice() 만 사용할 수 있습니다. – Givi

0

timearrayorig은 배열에 대한 참조를 보유하므로 timearray = timearrayorig; 두 레이블은 동일한 메모리 공간을 참조합니다. 당신이 뭔가를 할 수있는 배열을 복사하려면

는 :

자바 스크립트
timearray = []; 
for(var i = 0; i < timearrayorig.length; i++) timerray[i] = timearrayorig[i];