Автор оригинала: Andrew Steele.
Есть много Hullaballoo.
Правда, массивы и все их функции итератора могут быть запутаны для начинающих, поэтому я собираюсь попробовать упростить вещи для всех, обрамляя вопрос с конца: что вы хотите вернуться?
Укороченная версия
- Вернуть одну вещь для каждой существующей вещи:
карта()
- Вернуть только некоторые из существующих вещей:
фильтр()
- Вернуть только одну новую вещь:
уменьшать()
- Не возвращайте ничего, но сделайте что-нибудь с каждой существующей вещью:
для каждого()
Я дам вам быструю подножку каждого, а затем примеры, используя более старый, неконкуратный синтаксис функции, а также более новой синтаксис функции стрелки.
Вернуть одну новую запись для каждой существующей записи: карта ()
Если у вас есть массив значений, и вы хотите что-то сделать для каждой записи в этом массиве и вернуть новый массив с новыми значениями, то карта ()
твой друг. Вот простая функция, которая принимает массив и удваивает каждую запись:
const originalArray = [1, 2, 3]; const newArray = originalArray.map(function(item) { return item * 2; }); console.log(newArray); // -> [2, 4, 6]
Вот одно и то же, используя более новый синтаксис:
const originalArray = [1, 2, 3]; const newArray = originalArray.map(item => item * 2); console.log(newArray); // -> [2, 4, 6]
Обратите внимание, что с более новым синтаксисом стрелки нам не нужно использовать ключевое слово функции, ключевое слово возврата или вьющиеся скобки. Это потому, что функции стрелки дают нам неявное возвращение для «простых» функций, таких как этот. Вы можете прочитать больше о функциях arrow здесь , от WES BOS.
Верните новый массив только с некоторыми из существующих записей: Filter ()
Фильтр – это, вероятно, самая простая функция массива для понимания, потому что она так хорошо названа. Фильтр принимает массив значений, выполняет функцию или сравнение на каждом значении, а затем возвращает новый массив только значений, которые проходят тест (что мы называем «правдивыми» значениями).
Вот пример, который принимает множество номеров и возвращает только те, которые больше 5:
const originalArray = [1, 9, 4, 2, 42]; const newArray = originalArray.filter(function(item) { return item > 5; }); console.log(newArray); // -> [9, 42]
Вот часть фильтра с функцией стрелки:
const newArray = originalArray.filter(item => item > 5);
Вернуть одно новое только: Уменьшить ()
Иногда у вас есть массив ценностей и просто хочу вернуть одну новую вещь из них. Уменьшить принимать массив, выполняет функцию или сравнение на каждом элементе, а затем делает что-то, что называется «аккумулятор». Это одна из тех функций, которые на самом деле легче описать с примером, потому что условия, которые необходимо использовать для описания, что это так же, как и сама функция!
Предположим, у вас есть массив имен, и вы хотите подсчитать количество раз, когда появится имя «Боб»:
const originalArray = ["Alice", "Bob", "Charlie", "Bob", "Bob", "Charlie"]; const numberOfBobs = originalArray.reduce(function(accumulator, item) { if (item === "Bob") { return accumulator + 1; } else { return accumulator; } }, 0); console.log(numberOfBobs); // -> 3
Снова со стрелками:
const numberOfBobs = originalArray.reduce((accumulator, item) => { if (item === "Bob") { return accumulator + 1; } else { return accumulator; } }, 0);
Как видите, функция стрелки не спасит нас столько же набора текста, потому что мы должны были предоставить два параметра функции, а затем имели логику, прежде чем мы могли вернуть, поэтому мы все еще нуждались в курчавых скобках.
0 в конце функции «Уменьшить» – это значение, которое мы начинаем с аккумулятора, добавив 1 к нему, если значение, которое мы сталкиваемся, – это «Боб», иначе мы возвращаем аккумулятор, так как в настоящее время есть. Если вы ничего не вернетесь, то в следующий раз функция запущена, аккумулятор будет undefined
Отказ
Сделайте что-нибудь с каждым значением массива, но не возвращайте ничего: foreach ()
Иногда у вас будет массив ценностей, с которыми вы хотите что-то сделать, но не нужно следить за тем, что возвращается от каждого вызова функции. Это то, что foreach ()
для.
const originalArray = [1, 2, 3]; originalArray.forEach(function(item) { doSomething(item); });
И снова со стрелками:
originalArray.forEach( item => doSomething(item); );
Финальные ноты
Просто и сладко. Это самые простые случаи использования, которые я мог бы придумать для каждой функции, чтобы попытаться сделать его максимально простым, чтобы понять, когда вы должны использовать каждый. Существует огромное количество задач, которые вы можете сделать с этими функциями, и существует «расширенная» форма каждой из этих функций, которые дает вам текущий индекс тоже:
arr.map((item, index) => {}) arr.filter((item, index) => {}) arr.reduce((accumulator, item, index) => {}) arr.forEach((item, index) => {})
Если вам это нужно, используйте его!