로컬

2014-03-07 6 views
0

내가 할당 배열에 문제가 자바 스크립트 전역으로 정의 배열 함수 배열을 만들어 할당 :로컬

var obj = [ {'id': 1, 'size': 'king' }, {'id':4, 'size': 'queen'} ]; 
    function modify(o){ 
     var result=[{'id': 1, 'size': 'king'}]; 
     o=result.slice(); 
    } 
    modify(obj); 
    document.write("result:" + JSON.stringify(obj)); //obj both 'king and queen' 

내가 '결과'배열의 데이터로 채워 'OBJ'을하고 싶은,하지만이 방법을 수행합니다 작동하지. 배열이 비어 확인하고이 같은 내용 변경이 가능합니다 : 나는 내가 할 수있는 알고

o.length=0;//obj is empty outside of the function 
    o[1].id = 100;//id is changed outside of the function 

을 그 '결과'배열을 반환하고 외부 t 'OBJ',하지만 더 그런 관계가있을 것입니다 할당하여 함수에서. 도움이 될 것입니다. 감사합니다

+0

obj를 수정 한 후에는 'king'만 출력되는 것입니까? – Andy

+0

예, 예상 출력입니다. – user2775380

+0

그건 불가능합니다. 자바 스크립트에는 참조로 전달이 없습니다. 그러나 실제로 전달 된 배열 객체를 수정할 수 있습니다 - 덮어 쓰지 않고 내용을 변경합니다. – Bergi

답변

0

할당이 기능에서 수행되기를 원할 경우이 작업을 수행하는 방법은 두 가지가 있습니다. 당신은 OBJ의 내용을 변경 할 매개 변수로 전달하는 깨끗한 방법 할 수 있습니다

var obj = [ {'id': 1, 'size': 'king' }, {'id':4, 'size': 'queen'} ]; 
function modify(o){ 
    var result=[{'id': 1, 'size': 'king'}]; 
    o.length = 0; 
    o.push.apply(o,result); // push every element from result 
} 
modify(obj); 
console.log(obj); 

을 아니면 다른 뭔가에 대한 참조를 변경할 수 있습니다. 이 경우 함수에 실제 변수가 아닌 매개 변수를 사용해야합니다 :

var obj = [ {'id': 1, 'size': 'king' }, {'id':4, 'size': 'queen'} ]; 
function modifyObj(){ 
    var result=[{'id': 1, 'size': 'king'}]; 
    obj = result.slice(); 
} 
modify(); 
console.log(obj); 

두 번째 방법에 약간의 개선이 객체에 배열을 유지하는 것입니다,하지만 당신이 액세스해야하는 방식을 변경 코드의 나머지 부분에서 :

var container = { 
    obj : [ {'id': 1, 'size': 'king' }, {'id':4, 'size': 'queen'} ] 
}; 
function modify(container, key){ 
    var result=[{'id': 1, 'size': 'king'}]; 
    container[key] = result.slice(); 
} 
modify(container, 'obj'); 
console.log(container.obj); 
+0

어쩌면 두 번째 함수의 이름을 더 이상 '수정'하지 않아야합니다 ... – Bergi

+0

@Bergi 사실, 바깥 쪽 범위의 변수를 변경한다는 사실을 나타 내기 위해 이름을 업데이트했습니다. 또한 객체의 "이름"을 매개 변수로 전달할 수있는 마지막 아이디어를 수정했습니다. – Tibos

+0

죄송합니다. 실제로 변수를 수정합니다 ... 다른 응답과 마찬가지로 거기에 'return'이 있다고 생각했습니다. 그러나 설명을 주셔서 감사합니다 .-) – Bergi

관련 문제