Как работает функция изменения положения элемента в массиве?

Нужно написать функцию, которая получает в качестве аргумента массив, и меняет нулевой и последний элемент массива местами. Я нашел такое решение, но понять его не получается. Объясните пожалуйста.

function swap(arr, from, to) {
    arr.splice(from, 1, arr.splice(to, 1, arr[from])[0]);
}

var letters = ["a", "b", "c", "d", "e", "f"];

swap(letters, 0, 5);

console.log(letters);
  • Вопрос задан
  • 154 просмотра
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
Чтобы поменять местами, надо:
  1. выдернуть первый,
  2. выдернуть второй,
  3. вставить на новое место первый,
  4. вставить на новое место второй.

Метод массива .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;
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
joeberetta
@joeberetta Куратор тега JavaScript
Читай: https://epdf.pub/google-for-dummies.html
Вот документация на MDN
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы