Начиная свой путь к программированию, я счел очень важным (но разочаровывающим) выяснить, как делать что-то на JavaScript без каких-либо вспомогательных инструментов. Теперь, когда у меня есть некоторые знания, я решил найти более разумные способы решения тех же проблем. Я слушал подкаст Frontend Happy Hour и слышал, как они довольно часто упоминают Lodash, поэтому решил копнуть глубже.

Согласно документации, Lodash - это «современная служебная библиотека JavaScript, обеспечивающая модульность, производительность и дополнительные возможности», но она не объясняет и половины тех удобных вещей, которые она делает для улучшения функциональности вашего кода. Lodash - это расширенный набор Underscore, но он быстрее, умнее и проще в использовании. В нем есть множество методов, которые помогают кодировщикам работать с массивами, функциями, объектами, строками и многим другим! Я обсуждал все свои любимые методы, но мы могли быть здесь весь день, поэтому вместо этого я решил выбрать 5 лучших (в произвольном порядке).

1. _.get -

Официальное определение: получает значение по пути к объекту. Если разрешенное значение не определено, вместо него возвращается defaultValue.

Теперь давайте разберемся с этим. Допустим, у нас есть вымышленная бумажная компания с необычным офис-менеджером, и вы хотели бы проанализировать его квартальные результаты с 2000 года.

let dunderMifflin:{
   branches: {
      scranton:{
         manager:{
            name: "Michael Scott",
            performanceReviews: {
               Q1_2000: {
                  score: 5,
                  notes: "Some what adequate"
               },
               Q2_2000:{
                  score: 6,
                  notes: "Still afloat"
               },
               Q3_2000:{
                  score: 8,
                  notes: "Highest sales for this quarter"
              },
              Q4_2000:{
                 score: 8,
                 notes: "Managed to maintain highest sales"
              }
           }
        }
     }
   }
}

Обычно нам нужно сделать следующее:

if(dunderMifflin && dunderMifflin.branches && dunderMifflin.branches.scranton && dunderMifflin.branches.scranton.manager &&  dunderMifflin.branches.scranton.manager.performanceReviews && dunderMifflin.branches.scranton.manager.performanceReviews.Q1_2000 && dunderMifflin.branches.scranton.manager.performanceReviews.Q1_2000.notes){}

Это гарантирует, что мы не столкнемся с такими ошибками, как «Невозможно получить доступ к X из неопределенного», но его явно трудно читать, и он может быть подвержен ошибкам из-за большого количества текста.

Давай попробуем это с _.get!

if(_.get(dunderMifflin, "branches.scranton.manager.performanceReviews.Q1_2000.notes")){}

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

2. Методы массива для объектов (forEach, some, map, reduce, filter) -

Если вы знаете методы работы с массивами, они будут выглядеть знакомыми. Lodash теперь делает это возможным для объектов. Я не буду рассматривать их все, но, пожалуйста, посмотрите ниже пример карты с объектом. Воспользуемся нашими данными сверху.

//Currently the scores are out of 10 but let's convert them to an //array out of 100.
let dunderScores = _.map(dunderMifflin.branches.scranton.manager.performanceReviews, quarter => {
    return quarter.score * 10
})
console.log(dunderScores)
// => [50, 60, 80, 80]

Теперь мы можем пролистывать разные кварталы обзоров производительности и получать оценки. Затем мы можем изменить оценки и вернуть их в виде массива!

3. _.cloneDeep -

Официальное определение: клонирует вложенный объект и возвращает глубоко клонированное значение.

Давайте продолжим использовать те же данные, что и выше. Допустим, мы хотим клонировать объект Dunder Mifflin. В прошлом лучшим вариантом было бы написать собственную рекурсивную функцию клонирования или JSON.stringify, а затем JSON.parse.

let clonedDunderMifflin = JSON.parse(JSON.stringify(dunderMifflin))

Это проблематично, потому что не допускаются внутренние объекты или функции. Не волнуйтесь, Lodash здесь, чтобы спасти положение! Вместо этого мы можем использовать _.cloneDeep для создания уникальной копии объекта, чтобы вы могли изменить ее, и она не изменила оригинал.

let clonedDunderMifflin = _.cloneDeep(dunderMifflin);
console.log(clonedDunderMifflin[0] === dunderMifflin[0]);
// => false

4. __. Удаление заусенцев -

Официальное определение: Удаление заусенцев с строки путем преобразования букв Latin-1 Supplement и Latin Extended-A в основные латинские буквы и удаления комбинированных диакритических знаков.

Этот метод очень полезен, если вы работаете с любыми международными именами или словами, которые иначе могли бы запутать вашу базу данных. Допустим, у нас есть новый соискатель Dunder Mifflin, который только что подал заявку через веб-сайт нашей компании, и его зовут Мичхаэл Чёд. Мы должны использовать метод _.deburr для фильтрации имени кандидата, чтобы убедиться, что оно есть в нашей базе данных в форме, которую мы можем использовать позже.

let applicant = _.deburr("Mïćhãêl Şčöţŧ")
console.log(applicant)
// => "Michael Scott"

Lodash полон других методов манипулирования строками, которые могут помочь вам изменить данные!

5. _.uniq -

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

_.uniq позволяет очень просто и быстро очистить массив без необходимости повторения. Допустим, у нас есть множество людей, которые записались в комитет по планированию партии, но некоторые люди были очень взволнованы и записывались несколько раз. Простой способ просмотреть эти данные - использовать _.uniq.

let partyPlanningCommittee = ["Angela", "Pam", "Michael", "Angela", "Phyllis", "Phyllis", "Angela", "Andy", "Angela"]

let revisedList = _.uniq(partyPlanningCommittee)
console.log(revisedList)
// => ["Angela", "Pam", "Michael", "Phyllis", "Andy"]

Lodash также предоставляет множество других полезных методов сортировки массивов, например _. sortedUniq, _.sortedIndex, _.sortedIndexBy, _.sortedIndexOf, _.sortedLastIndex, _.sortedLastIndexBy, _.sortedLastIndexOf, _.sortedUniqBy.

Заключение:

Хотя полезно понимать, как создавать эти методы самостоятельно, я считаю, что в производственной среде безопаснее и эффективнее использовать протестированную библиотеку, такую ​​как Lodash. Если вам нужно часто решать проблемы в кодовой базе, с которыми могут помочь эти методы, я рекомендую вам импортировать Lodash!

А теперь наслаждайтесь этой фотографией счастливых программистов, изучающих Lodash!

Используемые полезные ресурсы:

Https://flaviocopes.com/how-to-clone-javascript-object/