Конечно! В этой статье мы рассмотрим набор фрагментов кода JavaScript, в которых используются методы массива shift() и unshift(). Эти методы являются мощными инструментами для управления и изменения содержимого массивов, особенно когда речь идет о добавлении или удалении элементов в начале массива. Если вы готовитесь к техническим собеседованиям, освоение этих методов имеет решающее значение для демонстрации вашего понимания основных методов работы с массивами.

На протяжении всей этой статьи мы будем углубляться в различные сценарии и варианты практического использования, в которых могут быть эффективно применены функции shift() и unshift(). Изучая фрагменты кода и их интуитивно понятные объяснения, вы получите полное представление о том, как эти методы можно использовать для решения задач кодирования в стиле интервью.

Фрагмент 1: Обратный массив

function reverseArray(arr) {
  var reversedArr = [];
  while (arr.length > 0) {
    reversedArr.unshift(arr.shift());
  }
  return reversedArr;
}

const array = [1, 2, 3, 4, 5];
console.log(reverseArray(array));

//Output
[5, 4, 3, 2, 1]

Объяснение. В этом фрагменте кода показано, как инвертировать массив, используя только функции сдвига и восстановления массива. Он создает новый массив reversedArr и итеративно сдвигает элементы из исходного массива arr, используя shift, и вставляет их в начало reversedArr, используя unshift. Это эффективно меняет порядок элементов.

Фрагмент 2: удалить дубликаты

function removeDuplicates(arr) {
  var uniqueArr = [];
  while (arr.length > 0) {
    var element = arr.shift();
    if (!uniqueArr.includes(element)) {
      uniqueArr.unshift(element);
    }
  }
  return uniqueArr;
}

const array = [1, 2, 2, 3, 4, 4, 5];
console.log(removeDuplicates(array));

//Output
[1, 2, 3, 4, 5]

Объяснение. Этот фрагмент кода удаляет дубликаты из массива с помощью функций массива сдвига и отмены сдвига. Он инициализирует пустой массив uniqueArr и итеративно сдвигает элементы исходного массива arr. Прежде чем вставить каждый элемент в uniqueArr, он проверяет, присутствует ли уже этот элемент, используя include. Если нет, элемент добавляется в начало uniqueArr с помощью unshift.

Фрагмент 3: Повернуть массив

function rotateArray(arr, positions) {
  positions = positions % arr.length;
  while (positions > 0) {
    arr.unshift(arr.pop());
    positions--;
  }
  return arr;
}

const array = [1, 2, 3, 4, 5];
console.log(rotateArray(array, 2));

//Output
[4, 5, 1, 2, 3]

Объяснение. Этот фрагмент кода поворачивает массив вправо на заданное количество позиций, используя сдвиг и несмещение. Он вычисляет эффективное количество позиций, взяв по модулю позиций длину массива. Затем он многократно извлекает последний элемент массива с помощью pop и вставляет его в начало с помощью unshift. Процесс продолжается для желаемого количества позиций.

Фрагмент 4: объединение отсортированных массивов

function mergeSortedArrays(arr1, arr2) {
  var mergedArr = [];
  while (arr1.length > 0 && arr2.length > 0) {
    if (arr1[0] <= arr2[0]) {
      mergedArr.push(arr1.shift());
    } else {
      mergedArr.push(arr2.shift());
    }
  }
  return mergedArr.concat(arr1, arr2);
}

const array1 = [1, 3, 5];
const array2 = [2, 4, 6];
console.log(mergeSortedArrays(array1, array2));

//Output
[1, 2, 3, 4, 5, 6]

Объяснение. Этот фрагмент кода объединяет два отсортированных массива в один отсортированный массив, используя только сдвиг, несмещение и объединение. Он создает пустой массив mergedArr и сравнивает первые элементы обоих массивов (arr1 и arr2). Меньший элемент сдвигается из соответствующего массива и помещается в mergedArr. Процесс продолжается до тех пор, пока один из массивов не станет пустым. Наконец, оставшиеся элементы из обоих массивов объединяются с помощью mergedArr, чтобы сформировать окончательный отсортированный массив.

Фрагмент 5: Последние N элементов

function getLastNElements(arr, n) {
  if (n >= arr.length) {
    return arr;
  }
  while (arr.length > n) {
    arr.shift();
  }
  return arr;
}

const array = [1, 2, 3, 4, 5];
console.log(getLastNElements(array, 3));

//Output
[3, 4, 5]

Объяснение. Этот фрагмент кода возвращает последние N элементов массива с использованием сдвига и снятия сдвига. Если N больше или равно длине массива, исходный массив возвращается как есть. В противном случае элементы сдвигаются от начала массива до тех пор, пока длина не уменьшится до N, эффективно возвращая последние N элементов.

Фрагмент 6: найти максимум

function findMaximum(arr) {
  var max = arr.shift();
  while (arr.length > 0) {
    var current = arr.shift();
    if (current > max) {
      max = current;
    }
  }
  return max;
}

const array = [4, 2, 9, 7, 5];
console.log(findMaximum(array));

//Output
9

Объяснение. Этот фрагмент кода находит максимальное значение в массиве с помощью сдвига и снятия сдвига. Он инициализирует max первым элементом массива. Затем он итеративно сравнивает каждый элемент массива с max, сдвигая элементы с помощью shift. Если найден элемент большего размера, он заменяет макс. Процесс продолжается до тех пор, пока массив не станет пустым и не будет возвращено максимальное значение.

Фрагмент 7: найти минимум

function findMinimum(arr) {
  var min = arr.shift();
  while (arr.length > 0) {
    var current = arr.shift();
    if (current < min) {
      min = current;
    }
  }
  return min;
}

const array = [4, 2, 9, 7, 5];
console.log(findMinimum(array));

// Output
2

Объяснение. Этот фрагмент кода находит минимальное значение в массиве с помощью сдвига и снятия сдвига. Он инициализирует min первым элементом массива. Затем он итеративно сравнивает каждый элемент массива с min, сдвигая элементы с помощью shift. Если найден меньший элемент, он заменяет min. Процесс продолжается до тех пор, пока массив не станет пустым и не будет возвращено минимальное значение.

Фрагмент 8: проверьте палиндром

function isPalindrome(str) {
  var chars = str.split("");
  var reversedChars = [];
  while (chars.length > 0) {
    reversedChars.unshift(chars.shift());
  }
  var reversedStr = reversedChars.join("");
  return str === reversedStr;
}

const string = "level";
console.log(isPalindrome(string));

//Output
true

Объяснение. Этот фрагмент кода проверяет, является ли заданная строка палиндромом, используя сдвиг, снятие сдвига, разделение и соединение. Он разбивает строку на массив символов символов, используя split. Затем он итеративно сдвигает символы из chars и вставляет их в начало reversedChars с помощью unshift. После объединения перевернутых символов в строку reversedStr она сравнивает строку str с reversedStr, чтобы определить, является ли она палиндромом.

Фрагмент 9: подсчет отрицательных чисел

function countNegativeNumbers(matrix) {
  var count = 0;
  while (matrix.length > 0) {
    var row = matrix.shift();
    while (row.length > 0) {
      if (row.shift() < 0) {
        count++;
      }
    }
  }
  return count;
}

const matrix = [[-1, 2, -3], [-4, -5, 6], [7, -8, -9]];
console.log(countNegativeNumbers(matrix));

//Output
6

Объяснение. Этот фрагмент кода подсчитывает количество отрицательных чисел в матрице, используя сдвиг и несмещение. Он перебирает каждую строку матрицы, сдвигая строки из матрицы. Затем он выполняет итерацию по каждому элементу в строке, сдвигая элементы из строки. Если элемент отрицательный, он увеличивает счетчик. Процесс продолжается до тех пор, пока матрица не станет пустой и не будет возвращено общее количество отрицательных чисел.

Фрагмент 10: удалить ведущие нули

function removeLeadingZeros(str) {
  var chars = str.split("");
  while (chars.length > 0 && chars[0] === "0") {
    chars.shift();
  }
  return chars.join("");
}

const string = "000123";
console.log(removeLeadingZeros(string));

//Output
123

Объяснение. Этот фрагмент кода удаляет ведущие нули из строки с помощью операций сдвига, снятия сдвига, разделения и объединения. Он разбивает строку на массив символов символов, используя split. Затем он итеративно сдвигает символы из chars до тех пор, пока первый символ равен «0». Наконец, он объединяет оставшиеся символы chars, чтобы сформировать строку без начальных нулей.

Краткое содержание

В этой статье мы рассмотрели методы массива `shift()` и `unshift()` в JavaScript, сосредоточившись на их способности добавлять или удалять элементы в начале массива. Мы обсудили несколько фрагментов кода, демонстрирующих практические варианты использования этих методов.

Фрагменты кода охватывали различные сценарии, в том числе обращение массива, удаление дубликатов, вращение массива, объединение отсортированных массивов, извлечение последних N элементов, поиск максимального и минимального значений, проверку палиндромов, подсчет отрицательных чисел и удаление ведущих нулей.

Поняв и применяя эти фрагменты, вы сможете укрепить свои навыки работы с массивами и хорошо подготовиться к техническим собеседованиям. Методы `shift()` и `unshift()` являются ценными инструментами в вашем арсенале кодирования, позволяя вам эффективно манипулировать данными массива и решать широкий спектр проблем кодирования в стиле интервью.

Надеюсь, что приведенная выше статья дала лучшее понимание. Если у вас есть какие-либо вопросы относительно областей, которые я обсуждал в этой статье, области улучшения, не стесняйтесь комментировать ниже.

[Раскрытие информации: эта статья является совместным творением, в котором мои собственные идеи сочетаются с помощью ChatGPT для оптимальной артикуляции.]