본문 바로가기
Javascript

Array.prototype.copyWithin()

by 이도현 2021. 11. 15.

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/copyWithin

 

Array.prototype.copyWithin() - JavaScript | MDN

copyWithin() 메서드는 배열의 일부를 얕게 복사한 뒤, 동일한 배열의 다른 위치에 덮어쓰고 그 배열을 반환합니다. 이 때, 크기(배열의 길이)를 수정하지 않고 반환합니다.

developer.mozilla.org

https://www.w3schools.com/jsref/jsref_copywithin.asp

 

JavaScript Array copyWithin() Method

W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.

www.w3schools.com

copyWithin() 메서드는 좀 특이한 메서드이다.

배열의 일부를 얕게 복사한 뒤, 동일한 배열의 다른 위치에 덮어쓰고 그 배열을 반환한다.

이 때, 크기(배열의 길이)를 수정하지 않고 반환한다.

설명만 들어서는 이해가 잘 가지 않는데, 실제 예제를 보면 조금 이해가 빠르게 된다.

해당함수도 배열 원 데이터를 건드리므로 잘 못쓰면 원데이터가 소실된다는 위험성이 있다.

조심해서 사용해야한다.

 

먼저 구문은 다음과 같다.

arr.copyWithin(target[, start[, end]])

 

매개변수 target은 복사한 값을 넣을 위치를 가리키는 0 기반 인덱스이다. 음수는 배열의 끝부터 계산한다. 이 값이 arr.length보다 크거나 같으면 아무것도 복사하지 않는다.

쉽게 이야기하면 target은 이 배열에 붙여넣을 때 붙여넣는 시작점을 말하는 것이다. 0 기반이니 첫번째가 0이고, 두번째가 1이다.

매개변수 start와 end는 복사해서 붙여넣을 때 지금의 배열 어디서부터 어디까지 복사할 것인지를 말한다. 조금 헷갈리기 쉬운 것이, target이 붙여넣을 시작지점이고, start와 end가 복사할 대상의 시작과 끝을 말한다는 것이다. end는 더 조심해야하는데, end값을 포함해서 복사하는 것이 아니라 그 앞까지 복사한다는 것이다. 때문에, .copyWithin(0, 3, 3) 는 복사를 하나도 안한 것이 된다. 이것도 둘다 0기반이므로 조심해야한다.

 

다음 예제들로 심플하게 이해할 수 있을 것 같다.

let arr_test = [
{id : 1  , name : '설아' , team : '우주소녀'},
{id : 2  , name : '선의' , team : '우주소녀'},
{id : 3  , name : '보나' , team : '우주소녀'},
{id : 4  , name : '엑시' , team : '우주소녀'},
{id : 5  , name : '수빈' , team : '우주소녀'},
{id : 6  , name : '루다' , team : '우주소녀'},
{id : 7  , name : '다원' , team : '우주소녀'},
{id : 8  , name : '은서' , team : '우주소녀'},
{id : 9  , name : '성소' , team : '우주소녀'},
{id : 10 , name : '미기' , team : '우주소녀'},
{id : 11 , name : '여름' , team : '우주소녀'},
{id : 12 , name : '다영' , team : '우주소녀'},
{id : 13 , name : '연정' , team : '우주소녀'}
];
arr_test.copyWithin(0, 3, 4); // 3+1번째 요소를 4-1 까지 복사해서 0+1번째부터 붙여넣는다.
console.log(arr_test);
//Array [Object { id: 4, name: "엑시", team: "우주소녀" }, Object { id: 2, name: "선의", team: "우주소녀" }, Object { id: 3, name: "보나", team: "우주소녀" }, Object { id: 4, name: "엑시", team: "우주소녀" }, Object { id: 5, name: "수빈", team: "우주소녀" }, Object { id: 6, name: "루다", team: "우주소녀" }, Object { id: 7, name: "다원", team: "우주소녀" }, Object { id: 8, name: "은서", team: "우주소녀" }, Object { id: 9, name: "성소", team: "우주소녀" }, Object { id: 10, name: "미기", team: "우주소녀" }, Object { id: 11, name: "여름", team: "우주소녀" }, Object { id: 12, name: "다영", team: "우주소녀" }, Object { id: 13, name: "연정", team: "우주소녀" }]

 

 

'Javascript' 카테고리의 다른 글

Array.prototype.every()  (0) 2021.11.16
Array.prototype.entries()  (0) 2021.11.16
Array.prototype.find()  (0) 2021.11.12
Array.prototype.concat()  (0) 2021.11.11
JavaScript에서 true로 인식되는 값; 참 같은 값; Truthy  (0) 2021.11.11