Array.copyWithin()
Копирует часть массива в тот же массив и возвращает его без изменения размера, т. е. копирует элементы массива в пределах одного массива.
Спецификация: 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] массив результатов, сохраняющий исходную длину
Поддержка браузерами
Метод | ||||||
copyWithin() | 45+ | 32+ |
Комментарии
<code>
, несколько строчек кода — в теги<pre><code>
...ваш код...</code></pre>
.