← Назад ко всем вопросам

Какие методы массива не мутируют исходный массив

1️⃣ Как кратко ответить

Методы массива, которые не мутируют исходный массив, включают map(), filter(), reduce(), concat(), slice(), join(), includes(), indexOf(), lastIndexOf(), find(), findIndex(), every(), и some(). Эти методы возвращают новый массив или значение, не изменяя оригинальный массив.

2️⃣ Подробное объяснение темы

В JavaScript массивы являются изменяемыми объектами, что означает, что их содержимое может быть изменено. Однако, не все методы массивов изменяют (мутируют) исходный массив. Некоторые методы возвращают новый массив или значение, оставляя оригинальный массив неизменным. Это важно для сохранения данных в их первоначальном виде и предотвращения непреднамеренных изменений.

Методы, которые не мутируют массив:

  1. map(): Создает новый массив с результатами вызова предоставленной функции для каждого элемента в массиве.

    const numbers = [1, 2, 3];
    const doubled = numbers.map(num => num * 2);
    // numbers: [1, 2, 3]
    // doubled: [2, 4, 6]
    
    • numbers остается неизменным.
    • doubled — новый массив с удвоенными значениями.
  2. filter(): Создает новый массив со всеми элементами, прошедшими проверку, реализованную в предоставленной функции.

    const numbers = [1, 2, 3, 4];
    const evenNumbers = numbers.filter(num => num % 2 === 0);
    // numbers: [1, 2, 3, 4]
    // evenNumbers: [2, 4]
    
    • numbers остается неизменным.
    • evenNumbers — новый массив с четными числами.
  3. reduce(): Применяет функцию к аккумулятору и каждому значению массива (слева направо), сводя его к единственному значению.

    const numbers = [1, 2, 3, 4];
    const sum = numbers.reduce((acc, num) => acc + num, 0);
    // numbers: [1, 2, 3, 4]
    // sum: 10
    
    • numbers остается неизменным.
    • sum — сумма всех элементов массива.
  4. concat(): Возвращает новый массив, состоящий из массива, на котором он был вызван, соединенного с другими массивами и/или значениями.

    const array1 = [1, 2];
    const array2 = [3, 4];
    const combined = array1.concat(array2);
    // array1: [1, 2]
    // array2: [3, 4]
    // combined: [1, 2, 3, 4]
    
    • array1 и array2 остаются неизменными.
    • combined — новый массив, объединяющий array1 и array2.
  5. slice(): Возвращает новый массив, содержащий копию части исходного массива.

    const numbers = [1, 2, 3, 4];
    const sliced = numbers.slice(1, 3);
    // numbers: [1, 2, 3, 4]
    // sliced: [2, 3]
    
    • numbers остается неизменным.
    • sliced — новый массив, содержащий элементы с индексами от 1 до 2.
  6. join(): Объединяет все элементы массива в строку.

    const elements = ['Fire', 'Air', 'Water'];
    const joined = elements.join('-');
    // elements: ['Fire', 'Air', 'Water']
    // joined: 'Fire-Air-Water'
    
    • elements остается неизменным.
    • joined — строка, содержащая элементы массива, разделенные дефисом.
  7. includes(): Определяет, содержит ли массив определенное значение, возвращая true или false.

    const numbers = [1, 2, 3];
    const hasTwo = numbers.includes(2);
    // numbers: [1, 2, 3]
    // hasTwo: true
    
    • numbers остается неизменным.
    • hasTwo — булево значение, указывающее на наличие элемента.
  8. indexOf() и lastIndexOf(): Возвращают первый или последний индекс, по которому данный элемент может быть найден в массиве, или -1, если элемент не найден.

    const numbers = [1, 2, 3, 2];
    const index = numbers.indexOf(2);
    const lastIndex = numbers.lastIndexOf(2);
    // numbers: [1, 2, 3, 2]
    // index: 1
    // lastIndex: 3
    
    • numbers остается неизменным.
    • index и lastIndex — индексы первого и последнего вхождения элемента.
  9. find() и findIndex(): Возвращают первый элемент или его индекс, который удовлетворяет предоставленной функции.

    const numbers = [1, 2, 3, 4];
    const found = numbers.find(num => num > 2);
    const foundIndex = numbers.findIndex(num => num > 2);
    // numbers: [1, 2, 3, 4]
    // found: 3
    // foundIndex: 2
    
    • numbers остается неизменным.
    • found — первый элемент, удовлетворяющий условию.
    • foundIndex — индекс первого элемента, удовлетворяющего условию.
  10. every() и some(): Проверяют, удовлетворяют ли все или некоторые элементы массива условию, заданному в функции.

    const numbers = [1, 2, 3, 4];
    const allPositive = numbers.every(num => num > 0);
    const someGreaterThanTwo = numbers.some(num => num > 2);
    // numbers: [1, 2, 3, 4]
    // allPositive: true
    // someGreaterThanTwo: true
    
    • numbers остается неизменным.
    • allPositive и someGreaterThanTwo — булевые значения, указывающие на выполнение условия.

Эти методы полезны, когда необходимо работать с массивами, не изменяя их исходное состояние, что особенно важно в функциональном программировании и при работе с неизменяемыми данными.

Тема: JavaScript
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки