MDN’s new design is in Beta! A sneak peek: https://blog.mozilla.org/opendesign/mdns-new-design-beta/

Array.prototype.copyWithin()

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

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에 맞게 잘립니다.
start Optional
요소를 복사하기 시작할 0 기준 인덱스입니다. 음수 인 경우 시작부터 끝까지 계산됩니다.
start가 생략되면, copyWithin은 처음부터 복사합니다 (기본값은 0).
end Optional
선택 과목. 요소 복사를 끝내기위한 0 기반 인덱스입니다. copyWithin은 끝을 포함하여 끝까지 복사합니다. 음수이면 끝은 끝에서부터 계산됩니다.
end가 생략되면 copyWithin은 끝까지 복사합니다 (기본값은 arr.length입니다).

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 2017 Draft (ECMA-262)
The definition of 'Array.prototype.copyWithin' in that specification.
Draft  

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

문서 태그 및 공헌자

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