Копирует часть массива в тот же массив и возвращает его без изменения размера, т. е. копирует элементы массива в пределах одного массива.

Спецификация: ECMAScript 2015 (6th Edition, ECMA-262)
arr.copyWithin(target, start[, end = this.length])

Параметры

target
Начальный индекс позиции цели, куда копировать элементы.
Допускается использование отрицательных значений, в этом случае индекс с которого будет произведено копирование будет расчитан по следующей формуле: length (длина массива) + target.
start
Начальный индекс массива, откуда начинать копировать элементы.
Допускается использование отрицательных значений, в этом случае индекс с которого будет произведено копирование будет расчитан по следующей формуле: length (длина массива) + start.
end
Необязательный параметр. Конечный индекс массива, которым заканчивается копирование элементов массива. Если параметр не указан, то будут скопированы все элементы от начальной позиции (start) и до конца массива.
Допускается использование отрицательных значений, в этом случае индекс до которого будет произведено копирование будет расчитан по следующей формуле: length (длина массива) + end.

Измененный массив.

Метод copyWithin() копирует последовательность элементов массива внутри него в позицию, начинающуюся по индексу target. Копия фрагмента массива берётся по индексам, задаваемым вторым start и третьим аргументами end. Аргумент end является необязательным и по умолчанию равен длине массива array.length.

Внимание: Проверьте поддерживается ли этот метод в вашем браузере.

Выполнить код »

Рассмотрим подробнее выражение [1, 2, 3, 4, 5].copyWithin(-3, 0, -1). Первый аргумент target (цель): -3 ([1,2, 3 , 4,5]), здесь начинается ставляемая копия. Второй аргумент start (старт) равен 0 ([ 1 , 2,3,4,5]), это начало последовательности, которую мы хотим скопировать. Третий аргумент end (конец) равен -1 ([1,2,3,4, 5 ]), здесь заканчивается последовательность, которую мы будем копировать.

Таким образом, мы помещаем последовательность 1,2,3,4,5 в исходный массив, начиная с индекса 2 (значение 3).

Поскольку метод copyWithin не изменяет длину массива, в итоге мы получим массив [1,2,1,2,3].

[1, 2, 3, 4, 5]         массив
 0  1  2  3  4          индексы с начала масива
-5 -4 -3 -2 -1          индексы с конца масива
 ^     ^     ^          параметры метода
 |     |     +--------  end
 |     +--------------  target      
 +--------------------  start
 [1, 2, 3, 4, 5]        исходный массив
 [      1, 2, 3, 4, 5]  копируемые значения
 [1, 2, 1, 2, 3]        массив результатов, сохраняющий исходную длину

Ещё один пример [1, 2, 3, 4, 5].copyWithin(2,0,1).

В этом случае изменение должно начинаться с третьей позиции (это индекс = 2), поэтому target = 2. Копирование начинаем с первой позиции, поэтому start = 0. Нужно скопировать только один элемент, копирование закончим на второй позиции (это индекс = 1), а это означает, что end = 1. В итоге мы получим массив [1,2,1,4,5].

[1, 2, 3, 4, 5]         массив
 0  1  2  3  4          индексы с начала масива
-5 -4 -3 -2 -1          индексы с конца масива
 ^  ^  ^                параметры метода
 |  |  +--------------  target
 |  +-----------------  end     
 +--------------------  start
 [1, 2, 3, 4, 5]        исходный массив
 [      1            ]  копируемые значения
 [1, 2, 1, 4, 5]        массив результатов, сохраняющий исходную длину

Комментарии

пожелания к комментариям…
  • Приветствуются комментарии, соответствующие теме урока: вопросы, ответы, предложения.
  • Одну строчку кода оборачивайте в тег <code>, несколько строчек кода — в теги <pre><code>...ваш код...</code></pre>.
  • Допускаются ссылки на онлайн-песочницы (codepen, plnkr, JSBin и др.).