현재 번역은 완벽하지 않습니다. 한국어로 문서 번역에 동참해주세요.

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

["alpha", "bravo", "charlie", "delta"].copyWithin(2, 0);

// results in ["alpha", "bravo", "alpha", "bravo"]

Syntax

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

Parameters

target
복사된 시퀀스(배열 값들)를 덮어쓰기 할 인덱스(인덱스는 0부터 시작)입니다.  만약, 음수이면 대상(덮어쓰기할 인덱스 위치)이 배열 끝에서부터 계산됩니다.

target이 arr.length(배열의 길이)보다 크거나 같으면 아무 것도 복사되지 않습니다.
타겟이 시작 후 배치되면, 복사 된 시퀀스는 arr.length에 맞게 잘립니다.

(기존 번역 원본-타겟이 시작 후 배치되면, 복사 된 시퀀스는 arr.length에 맞게 잘립니다.-에 대한, 역자 주 : Parameter로 target, start가 지정된 경우, start 위치 값부터 배열 끝까지 값을 복사한 뒤, target 위치 값이 있는 인덱스 지점부터 배열 길이만큼 덮어씁니다. 배열의 길이(arr.length)를 넘어선 배열 값들은 배열의 길이(arr.length)에 맞게 잘립니다.)
start Optional (생략 가능)
요소를 복사하기 시작할 기준 인덱스(인덱스는 0부터 시작)입니다. 만약, start값이 음수라면 시작부터 끝까지 계산됩니다.
start가 생략되면, copyWithin은 처음부터 복사합니다 (기본값은 0).
end Optional (생략 가능)
요소 복사를 끝내기위한 기반 인덱스(인덱스는 0부터 시작)입니다. copyWithin은 끝을 포함하여 끝까지 복사합니다. 만약, end값이 음수이면 끝은 끝에서부터 계산됩니다.
end가 생략되면 copyWithin은 끝까지 복사합니다 (기본값은 arr.length입니다).

(위의 제가 번역하기 이전의 번역 원본에 대한 역자 주 : Parameter로 target, start, end가 지정된 경우, start 지점부터 end 인덱스 -1 지점까지 복사한 뒤, target 지점부터 arr.length까지 덮어씁니다. e.g. [1, 3, 4, 4].copyWithin(2, 0, 2); // [1, 3, 1, 3] )

Return value

수정 된 배열

Description

copyWithin은 C와 C ++의 memmove처럼 작동하며 Array의 데이터를 이동시키는 고성능 메소드입니다. 이것은 특히 같은 이름의 TypedArray 메소드에 적용됩니다. 시퀀스가 하나의 작업으로 복사되고 붙여 넣어집니다. 붙여 넣은 시퀀스는 복사 및 붙여 넣기 영역이 겹치는 경우에도 복사 된 값을 갖습니다.

copyWithin 함수는 의도적으로 일반 함수이므로이 값이 Array 객체 일 필요는 없습니다.

copyWithin 메서드는 변경 가능한 메서드입니다. 이 길이를 변경하지는 않지만 필요한 경우 내용을 변경하고 새 속성을 만듭니다.

Examples

[1, 2, 3, 4, 5].copyWithin(-2);
// [1, 2, 3, 1, 2]

[1, 2, 3, 4, 5].copyWithin(0, 3);
// [4, 5, 3, 4, 5]

[1, 2, 3, 4, 5].copyWithin(0, 3, 4);
// [4, 2, 3, 4, 5]

[1, 2, 3, 4, 5].copyWithin(-2, -3, -1);
// [1, 2, 3, 3, 4]

[].copyWithin.call({length: 5, 3: 1}, 0, 3);
// {0: 1, 3: 1, length: 5}

// ES6 형식화 된 배열은 Array의 하위 클래스입니다.
var i32a = new Int32Array([1, 2, 3, 4, 5]);

i32a.copyWithin(0, 2);
// Int32Array [3, 4, 5, 4, 5]

// 아직 ES6과 호환되지 않는 플랫폼 :
[].copyWithin.call(new Int32Array([1, 2, 3, 4, 5]), 0, 3, 4);
// Int32Array [4, 2, 3, 4, 5]

Polyfill

if (!Array.prototype.copyWithin) {
  Array.prototype.copyWithin = function(target, start/*, end*/) {
    // Steps 1-2.
    if (this == null) {
      throw new TypeError('this is null or not defined');
    }

    var O = Object(this);

    // Steps 3-5.
    var len = O.length >>> 0;

    // Steps 6-8.
    var relativeTarget = target >> 0;

    var to = relativeTarget < 0 ?
      Math.max(len + relativeTarget, 0) :
      Math.min(relativeTarget, len);

    // Steps 9-11.
    var relativeStart = start >> 0;

    var from = relativeStart < 0 ?
      Math.max(len + relativeStart, 0) :
      Math.min(relativeStart, len);

    // Steps 12-14.
    var end = arguments[2];
    var relativeEnd = end === undefined ? len : end >> 0;

    var final = relativeEnd < 0 ?
      Math.max(len + relativeEnd, 0) :
      Math.min(relativeEnd, len);

    // Step 15.
    var count = Math.min(final - from, len - to);

    // Steps 16-17.
    var direction = 1;

    if (from < to && to < (from + count)) {
      direction = -1;
      from += count - 1;
      to += count - 1;
    }

    // Step 18.
    while (count > 0) {
      if (from in O) {
        O[to] = O[from];
      } else {
        delete O[to];
      }

      from += direction;
      to += direction;
      count--;
    }

    // Step 19.
    return O;
  };
}

Specifications

Specification Status Comment
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'Array.prototype.copyWithin' in that specification.
Standard Initial definition.
ECMAScript 2016 (ECMA-262)
The definition of 'Array.prototype.copyWithin' in that specification.
Standard  
ECMAScript Latest Draft (ECMA-262)
The definition of 'Array.prototype.copyWithin' in that specification.
Living Standard  

Browser compatibility

Feature Chrome Edge Firefox (Gecko) Internet Explorer Opera Safari
Basic support 45 12 32 (32) No support 32 9.0
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support No support No support 32.0 (32) No support No support No support

See also

문서 태그 및 공헌자

 이 페이지의 공헌자: withdude2, imskojs
 최종 변경: withdude2,