자바 스크립트로 배열을 유지하는 방법은 무엇입니까?
-
06-07-2019 - |
문제
다음은 두 개의 배열 (NP 및 OP)이있는 코드입니다. 하나는 다른 하나의 사본입니다.
그러나 사본을 수정하면 원본도 수정됩니다! 구경하다:
<script type="text/javascript">
var op=new Array(0, 0);
var np=op;
np[1]=2;
document.write(op+"<br>")
document.write(np)
</script>
원본을 유지하고 사본을 수정하는 방법이 있습니까?
해결책
당신은 배열 사본을 만들지 않았습니다. 배열을 다른 변수에 할당했습니다. JavaScript로 복사되지 않습니다. 예에서는 액세스 할 수있는 두 개의 변수가있는 하나의 배열 만 있습니다. JavaScript로 배열을 복사하는 내장 방법이 없으므로 자신의 기능을 작성해야합니다.
보세요 이 stackoverflow 질문 배열에서 요소를 실제로 복사하는 방법에 대한 힌트.
다른 팁
내장 된 배열 함수 중 일부는 실제로 귀하를 위해 사본을 생성합니다. 그 중 하나는 슬라이스입니다.
예를 들어:
var op=new Array(0, 0);
var np= op.slice(0);
np[1]=2;
document.write(op+"<br>")
document.write(np)
당신이하는 일은 배열의 사본을 만드는 것이 아니라 배열에 대한 참조 사본 만 생성되므로 동일한 배열 개체에 대한 두 개의 참조를 얻을 수 있습니다.
이것이 배열의 실제 사본을 만들 수있는 방법입니다.
var np = op.concat();
그만큼 concat
메소드 추가 항목이 추가 된 배열 사본 인 새 배열을 만듭니다. 추가 항목을 지정하지 않으면 배열 사본 만 얻습니다.
Array.prototype.copy = function() {
return this.slice(0, this.length);
}
그 다음에
var op=new Array(0, 0);
var np=op.copy();
np[1]=2;
document.write(op+"<br>")
document.write(np)
복사하는 대신 두 번째 배열을 복제해야합니다.
--- 업데이트
객체를 변수에 할당하면 참조 만 복사됩니다 (즉, 동일한 데이터를 가리 킵니다). 이 개체의 독립적 인 사본을 사용하려면 복제해야합니다. 예를 들어이 방법에는 몇 가지 방법이 있습니다. 여기 jQuery를 사용하여 물체를 복제하는 방법입니다.
원본을 사용할 수 있습니다 slice
배열 사본을 반환하는 메소드 :
var np = op.slice(0,op.length);
두 번째 매개 변수는 선택 사항이어야하지만 즉, 필요하다고 생각합니다.
변경 사항으로 완료 한 코드 :
var op=new Array(0, 0);
var np=op.slice(0,op.length);
np[1]=2;
document.write(op+"<br>")
document.write(np)
새 배열을 만들려면 다음을 고려할 수 있습니다.
var op = [];
배열을 복사하려면 :
var np=op.slice();
또는
var np=op.concat();
Slice는 하나의 캐릭터가 적은 반면 Concat는 더 빠릅니다. 어떤 사람들은 "슬라이스"또는 "concat"을 "복사"로 "사본"으로 만들기 위해 더 분명합니다.
두 경우 모두 매개 변수가 필요하지 않습니다. 슬라이스의 매개 변수는 코드를 더 크고 느리게 만듭니다.