Итерация по массивам без циклов стала проще!

Все в той или иной степени использовали циклы for для перебора массива, и если вы только начинаете работать с JavaScript, скорее всего, вы все еще им пользуетесь. Хотя в этом нет ничего плохого, методы, определенные классом Array, помогают создавать более чистый, более краткий и удобочитаемый код.

Основная предпосылка методов итерации — пройтись по элементам массива по порядку и передать их функции, которую мы предоставляем. Эта функция может быть определена встроенной, уже объявленной или быть функцией стрелки.

Методы итерации

  • карта()

Метод map() передает каждый элемент массива предоставленной функции и возвращает новый массив, содержащий значения, возвращаемые этой функцией.

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

Здесь следует отметить одну важную вещь: не использование возвращаемого массива является анти-шаблоном, и в этом случае нам лучше использовать Метод forEach().

  • для каждого()

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

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

  • фильтр()

Как следует из названия, filter() создает новый массив, содержащий элементы, соответствующие заданному условию.

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

Следующая фильтрация основана на приведении типов в JavaScript,поскольку индексы разреженного массива — иначе дыры будут неопределенными, то есть ложными по умолчанию.

  • уменьшить() и уменьшитьПраво()

Оба этих метода перебирают массив и возвращают одно единственное значение, в зависимости от предоставленной функции. Их ключевое отличие состоит в том, что reduce() работает слева направо, то есть от первого элемента массива к последнему, тогда как reduceRight() идет наоборот way — от последнего элемента до первого.

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

Внутри функции мы можем передать до 4 аргументов — предыдущее значение, текущее значение, текущий индекс и массив для итерации, при этом последние два аргумента являются необязательными. Помните, однако, что если было предоставлено начальное значение, предыдущее значение обратного вызова будет таким же, как начальное значение при первом вызове функции.

В следующем примере вы можете увидеть, как мы складываем все цены товаров. Поскольку начальное значение равно 0, при первом вызове сумма будет равна 0.

Основываясь на той же предпосылке, мы также можем использовать reduce() для получения одного целого объекта на основе указанного условия — например, самого дорогого.

В следующем примере мы сравниваем цену предыдущего товара с текущей и возвращаем самую высокую. При первом вызове 7 присваивается initialValue.price и 5,5 — currentValue.price, тогда как при последнем вызове initialValue.price равно 7,5, а затем сравнивается с currentValue.price, которое равно 15.

Чтобы сделать наш код более читабельным и модульным, мы также можем передать предопределенную функцию в наш метод сокращения:

  • каждый() и некоторые()

Оба этих метода перебирают массив и возвращают логическое значение в зависимости от того, проходят ли каждый или некоторые элементы указанный тест.

  • find(), findIndex() и lastIndexOf()

Три очень похожих метода, но разные по своей сути. Все они останавливают итерацию, как только выполняется заданное условие, при этом find() возвращает соответствующий элемент, тогда как findIndex() и lastIndexOf() возвращают индекс соответствующего элемента. Разница между этими двумя заключается в том, как они перебирают массив: findIndex() начинает с начала, возвращая первое вхождение, тогда как lastIndexOf() выполняет поиск назад, возвращая последнее вхождение.

Стоит отметить, что если вхождений нет, обаfindIndex() и lastIndexOf() вернут -1.

Чтобы узнать больше о методах массива, я настоятельно рекомендую следующее:

Вот и все!9 методов JavaScript, которые выполняют итерацию по массивам с различными вариантами использования без необходимости использования "циклов for". Спасибо, что нашли время прочитать эту статью, и я надеюсь увидеть вас в следующей!

Больше контента на plainenglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Получите эксклюзивный доступ к возможностям написания и советам в нашем сообществе Discord.