2013-06-29 4 views
1

정말 이상합니다. 배열 중 하나를 수정하면 다른 하나는 수정됩니다! 배열을 두 번 입력하는 것 이외의 방식으로 작동시키지 못했습니다. 내가 무엇을 할 수 있을지? 다른 배열을 수정하면 배열이 수정됩니다.

function test(a,b,c,d) 
{ 
    this.a=a; 
    this.b=b; 
    this.c=c; 
    this.d=d; 
} 

var data0=data=[[1,2,3,4],[5,6,7,8]]; 

function construct(constructor,args) 
{ 
    function F(){return constructor.apply(this,args);} 
    F.prototype=constructor.prototype; 
    return new F(); 
} 

for(var i=0,l=data.length;i<l;i++) 
{ 
    data[i]=construct(test,data[i]); 
} 

console.log(data0); 

http://jsfiddle.net/mageek/3GNMC/2/

+0

DATA0 및 데이터는 동일한 배열이다. 복제를 위해'data0 = data.slice (0); '를 사용하십시오 – mishik

+0

당신은 배열의 개별 복사본을 생성하지 않고, 대신 동일한 배열에 대해 별도의 참조를 만듭니다. 배열을 복제/복사하는 방법에 대한 사이트를 검색하면 답변을 찾을 수 있습니다. –

답변

2

같은 항목을 참조하는 :

var data0=data=[[1,2,3,4],[5,6,7,8]]; 

(및 보조 노트로 - 여기 data는 전역 객체에 끝을 실제로 선언되지 않았기 때문에 data0 만)

동일한 항목으로 두 개의 다른 배열을 생성하려면 다음을 수행하십시오.

,210
var data0 =[[1,2,3,4],[5,6,7,8]]; 
var data = []; 

data = data.concat(data0); 

또는

data = data0.slice(0); 
1

자바 스크립트 대신 메모리에 동일한 개체에 대한 두 변수를 가리 킵니다, data0=data 할당에 배열을 복사하지 않습니다. 당신은 필요에 실제로 예를 들어 복제 완전히 배열 :

var data0 = data.slice(0); 
관련 문제