JS метод Array.copyWithin()
Опис
Метод copyWithin надає можливість легко переміщати частини масиву всередині самого масиву без необхідності використання додаткових змінних або циклів. Особливістю методу copyWithin є його ефективність та зручність у використанні. Це корисний інструмент, особливо коли потрібно швидко змінити порядок елементів або дублювати частини масиву. Така можливість стає незамінною у різноманітних задачах обробки даних. Для тих, хто знайомий з мовами програмування C або C++, ця операція може нагадати функцію memmove, яка використовується для копіювання блоків пам'яті.
Як використовувати метод copyWithin?
Уявімо, що у вас є масив чисел, і вам потрібно перемістити частину цього масиву на інше місце всередині того ж масиву. Метод copyWithin дозволяє це зробити, вказавши декілька параметрів: де починати вставку, звідки брати дані та де закінчувати копіювання. Завдяки цьому методу, ви можете швидко та ефективно організовувати свої дані без великих зусиль.
// Маємо початковий масив чисел
let numbers = [1, 2, 3, 4, 5];
// Використовуємо метод copyWithin, щоб взяти числа "2" та "3"
// і помістити їх на місце чисел "4" та "5"
numbers.copyWithin(3, 1, 3);
console.log(numbers);
// Результат: [1, 2, 3, 2, 3]
У цьому прикладі ми використовуємо copyWithin, щоб копіювати елементи з позицій 1 до 3 (не включно) та вставляти їх, починаючи з позиції 3.
Важливо зазначити, що undefined конвертується в 0 під час перетворення на ціле число. Отже, якщо не задати параметр start, це буде еквівалентно заданню 0. Це призводить до копіювання всього масиву на потрібну позицію, що є схожим на правий зсув: права частина втрачається, а ліва – дублюється. Щоб уникнути плутанини, краще явно вказувати 0 як значення для start.
| Нотатка: | Основна перевага використання методу |
| Нотатка: | Використання методу |
| Нотатка: | Метод |
| Нотатка: | Метод |
| Нотатка: | Метод |
Синтаксис
copyWithin(target, start)
copyWithin(target, start, end)
Параметри
- *
target В якості параметра
targetвказується ціле число, яке вказує індекс, до якого копіювати послідовність.- Від'ємний індекс враховується з кінця масиву — якщо
target < 0, використовуєтьсяtarget + array.length. - Якщо
target < -array.length, використовується 0. - Якщо
target >= array.length, нічого не копіюється. - Якщо
targetрозташовано післяstartпісля нормалізації, копіювання відбувається лише до кінцяarray.length(іншими словами,copyWithin()ніколи не розширює масив).
- Від'ємний індекс враховується з кінця масиву — якщо
- *
start В якості параметра
startвказується ціле число, яке вказує індекс, з якого починається копіювання елементів.- Від'ємний індекс враховується з кінця масиву — якщо
start < 0, використовуєтьсяstart + array.length. - Якщо
start < -array.length, використовується 0. - Якщо
start >= array.length, нічого не копіюється.
- Від'ємний індекс враховується з кінця масиву — якщо
endВ якості параметра
endвказується ціле число, на якому має закінчитися копіювання елементів.copyWithin()копіює до, але не включаючиend.- Від'ємний індекс враховується з кінця масиву — якщо
end < 0, використовуєтьсяend + array.length. - Якщо
end < -array.length, використовується 0. - Якщо
end >= array.lengthабоendне вказаний, використовуєтьсяarray.length, що призводить до копіювання всіх елементів до кінця.
- Від'ємний індекс враховується з кінця масиву — якщо
Return
arrayЗмінений масив.
Переглядачі
| Переглядач | |||||
|---|---|---|---|---|---|
45 |
32 |
9 |
32 |
12 |
| Переглядач | ||||
|---|---|---|---|---|
45 |
45 |
32 |
9 |
| Переглядач | ||
|---|---|---|
4.0.0 |
1.0 |
Приклади
Перший виклик copyWithin() копіює елемент з позиції 3 в початкову позицію 0. Другий виклик копіює всі елементи з позиції 3 до кінця масиву в позицію 1.
Після виклику методу copyWithin() елементи масиву заміняються копіями елементів, що знаходяться між початковою та кінцевою позиціями. Результатом є модифікований масив.
console.log([1, 2, 3, 4, 5].copyWithin(0, 3));
// [4, 5, 3, 4, 5]
console.log([1, 2, 3, 4, 5].copyWithin(0, 3, 4));
// [4, 2, 3, 4, 5]
console.log([1, 2, 3, 4, 5].copyWithin(-2, -3, -1));
// [1, 2, 3, 3, 4]
У даному прикладі, метод copyWithin() викликається на масиві [1, , 3] з аргументами 2, 1, 2, що означає скопіювати елементи з позиції 1 (включно) до позиції 2 (виключно) до позиції 2. Результатом буде [1, empty, empty], де empty позначає порожні слоти.
console.log([1, , 3].copyWithin(2, 1, 2)); // [1, empty, empty]
В прикладі використовується об'єкт arrayLike, який не є масивом, але має властивість length та індекс 3. Застосування методу copyWithin() до arrayLike за допомогою Array.prototype.copyWithin.call(arrayLike, 0, 3) копіює значення з індексу 3 в початковий індекс 0, і повертає модифікований об'єкт. Після цього, виклик Array.prototype.copyWithin.call(arrayLike, 3, 1) копіює значення з індексу 1 в індекс 3, але властивість '3' видаляється, оскільки початковий індекс є порожнім слотом.
const arrayLike = {
length: 5,
3: 1,
};
console.log(Array.prototype.copyWithin.call(arrayLike, 0, 3));
// { '0': 1, '3': 1, length: 5 }
console.log(Array.prototype.copyWithin.call(arrayLike, 3, 1));
// { '0': 1, length: 5 }
// Властивість '3' видаляється, оскільки скопійоване джерело є порожнім слотом
