Большинство примеров я вижу для Уменьшить Поговорите о суммировании номеров. Можем ли мы использовать уменьшение, чтобы сделать больше, чем числа штампов? Разве это не звучит иронично, что эти аккумуляторные примеры калькулятора и суммы выглядят больше, чем они увеличивают некоторые значения, а не уменьшение? Я знаю, что я толкаю конверт здесь. Я думаю, что удаление дубликатов из массива будет более подходящим примером сокращения массива, с которыми мы работаем. Потому что, в конце концов, мы будем сокращать его в минимальное состояние.
Как никогда вы определяете, что уменьшается, вот мой взгляд на использование уменьшения, чтобы удалить дубликаты из массива. Он работает только для простых типов данных, конечно, вы можете улучшить его так, как вы видите, подходят. Для простоты, я приложу мое решение для массива. Прототип. Опять же, это необязательно.
Что такое волшебный соус?
Ключевым элементом нашего решения является InitivalValue
Параметр, как это определено в Ссылка JavaScript Отказ Подумай об этом. Нам дают массив, мы хотим вернуть массив с некоторыми элементами, удаленными из исходного массива. Ну, поменяйте проблему, что, если вы начали с пустого массива и только добавлены элементы к этому пустому массиву, если у него уже нет элемента из исходного массива. Это именно то, что мы собираемся сделать.
Array.prototype.removeDuplicates = function() { return this.reduce( (result, nextItem) => result.includes(nextItem) ? result : result.concat(nextItem), [] ); };
Посмотрите на это [] в конце строки 2. Это InitivalValue
Параметр я говорил о. Это пустой массив, ожидающий, чтобы быть заполнен после каждой итерации Уменьшить
Отказ Код на самом деле довольно прост, но давайте рассмотрим это тройное выражение. Для каждого предмета Уменьшить
Переходит, он проверяет, добавляется ли он в Результат
множество. Если это уже в наборе результатов, мы назначаем результат к себе под капотом, как Результат
Отказ Если элемент не существует, то мы объединяем элемент к результату, который затем интерпретируется как Результат .Concat [...]
Отказ Помните, CONCAT не изменяет массив, он просто возвращает новый массив с Concateenated Element.
Итак, что с этим [] тогда? Что на самом деле становится Результат
Как только Уменьшить
Начинается его операция. Представьте себе, что у вас не было этого параметра, доступного вам, то вам придется определить пустой массив за пределами Уменьшить
вызов. Затем в каждой пониженной итерации вы проверили вещи и помещали в этот внешний массив. Вместо этого сейчас часть Уменьшить
вызов.
Обертывание
Я положил несколько тестовых кодов в Jsbin Отказ Код также доступен в Github Gist Отказ В качестве окончательной заметки вы можете использовать эту технику в качестве отдельной функции, поэтому она не обязательно должна быть в массиве. Прототип, но часто удобно управлять его на массивом и цепочке, когда вы идете.
В другой статье я представлю продвинутую версию или использование техники, которую я показал в этой статье. Это касается последовательных или скорее каждая пару предметов в массиве. Вы можете найти эту статью, дополняющуюся после того, как вы освоите здесь хитрость.