Чтобы поменять местами, надо:
- выдернуть первый,
- выдернуть второй,
- вставить на новое место первый,
- вставить на новое место второй.
Метод массива
.splice() умеет и выдирать и вставлять одновременно. Его аргументы:
позиция-из-которой
,
сколько-выдрать
,
вставить-этого
,
вставить-ещё
, ...
А возвращает он массив выдранных. Поэтому [0] вернёт первый выдранный элемент.
Можно расписать вашу функцию подробнее:
function swap(arr, from, to) {
// выдёргиваем:
const A = arr.splice(from, 1)[0];
const B = arr.splice(to-1, 1)[0];
// -1 т.к. массив стал короче после первой операции
// вставляем
arr.splice(from, 0, B); // 0 - ничего не вырезаем, только вставляем
arr.splice(to, 0, A);
}
Ещё проще то же выглядит безо всяких
splice()
function swap(arr, from, to) {
// выдёргиваем-копируем:
const A = arr[from];
const B = arr[to];
// вставляем-заменяем
arr[from] = B;
arr[to] = A;
}