Существует множество библиотек javascript, необходимых для разработки веб-приложений, но мне больше всего нравится lodash.
Я начал программировать на javascript с помощью фреймворка React для нашего операционного портала, где нам приходилось иметь дело с огромными наборами данных, поступающими из разных серверных служб. Требуется много взаимосвязи данных и искажение данных, чтобы они могли отображаться в виде таблиц, а также в графической форме с использованием графики d3.
Основная библиотека, которая приходит мне на помощь, — это lodash, которая может нарезать и нарезать данные нужным образом без хлопот, связанных с многократным кодированием условий и циклов. Простота библиотеки делает ваш код элегантным.
Lodash упрощает нашу работу при работе с огромным набором массивов, чисел, объектов, строк и т. д. Он очень полезен в
- перебор массивов, объектов и строк
- обработка и проверка значений
- создание составных функций
Lodash предлагает множество API. Но я перечислил наиболее часто используемые API в моем случае и надеюсь, что он будет полезен и для большинства ваших нужд. Создал сниппеты с образцами данных и в конце поделился на них постером mindmap.
Пример набора данных.
import _ from 'lodash' //out sample data const studentList = [ { id: 1, name: 'John', age: 10 }, { id: 2, name: 'Jane', age: 11 }, { id: 3, name: 'Bob', age: 12 }, { id: 4, name: 'Alice', age: 10 }, { id: 5, name: 'Pete', age: 11 }, ];
Список API
- _.keyBy(Списокучащихся, ‘id’)
- _.groupBy(списокучащихся, ‘возраст’)
- _.filter(studentList, obj =› obj.age ‹ 12)
- _.orderBy(Списокучащихся, [‘имя’], [‘по возрастанию’])
- _.uniqBy(студенческий список, ‘возраст’)
- _.map(список учащихся, ‘имя’)
- _.sortBy(списокучащихся, ‘имя’)
- _.без(_.map(studentList, ‘имя’), ‘Боб’)
- _.each(studentList, fn)
- _.sample(_.map(studentList, ‘имя’))
- _.sampleSize(_.map(studentList, ‘имя’), 2)
- _.значения(Списокучащихся[0])
- _.keys(studentList[0])
- _.partition(studentList, el =› { return el[‘age’] ‹= 11})
- _.reject(studentList,{age: 10})
- _.startsWith(), _.pickBy() и _.isEmpty()
_.keyBy(studentList, ‘id’) — возвращает карту объектов с идентификатором в качестве ключа
# Output { '1': { id: 1, name: 'John', age: 10 }, '2': { id: 2, name: 'Jane', age: 11 }, '3': { id: 3, name: 'Bob', age: 12 }, '4': { id: 4, name: 'Alice', age: 10 }, '5': { id: 5, name: 'Pete', age: 11 } }
_.groupBy(studentList, ‘age’) — группирует объекты в массивы по возрасту.
# Output { '10': [ { id: 1, name: 'John', age: 10 }, { id: 4, name: 'Alice', age: 10 } ], '11': [ { id: 2, name: 'Jane', age: 11 }, { id: 5, name: 'Pete', age: 11 } ], '12': [{ id: 3, name: 'Bob', age: 12 }] }
_.filter(studentList, obj =› obj.age ‹ 12) — отфильтровывает объект, соответствующий условию. В этом случае он возвращает список учеников, чей возраст меньше 12 лет.
# Output [ { id: 1, name: 'John', age: 10 }, { id: 2, name: 'Jane', age: 11 }, { id: 4, name: 'Alice', age: 10 }, { id: 5, name: 'Pete', age: 11 } ]
_.orderBy(studentList, [‘name’], [‘asc’]) — возвращает отсортированный массив объектов на основе имени в порядке возрастания.
# Output [ { id: 4, name: 'Alice', age: 10 }, { id: 3, name: 'Bob', age: 12 }, { id: 2, name: 'Jane', age: 11 }, { id: 1, name: 'John', age: 10 }, { id: 5, name: 'Pete', age: 11 } ]
_.uniqBy(studentList, ‘age’) — возвращает уникальный массив объектов в зависимости от их возраста. Если у нас есть несколько совпадающих объектов, будет возвращен тот, что вверху.
# Output [ { id: 1, name: 'John', age: 10 }, { id: 2, name: 'Jane', age: 11 }, { id: 3, name: 'Bob', age: 12 } ]
_.map(studentList, ‘name’) — возвращает массив имен путем перебора коллекции. Второй параметр также может принимать функцию для перебора массива объектов.
# Output ['John', 'Jane', 'Bob', 'Alice', 'Pete']
_.sortBy(studentList, ‘name’) — возвращает отсортированный массив объектов на основе имени.
# Output [ { id: 4, name: 'Alice', age: 10 }, { id: 3, name: 'Bob', age: 12 }, { id: 2, name: 'Jane', age: 11 }, { id: 1, name: 'John', age: 10 }, { id: 5, name: 'Pete', age: 11 } ]
_.without(_.map(studentList, ‘имя’), ‘Боб’) — возвращает массив имен, исключая «Боб».
# Output ['John', 'Jane', 'Alice', 'Pete'] let displayAge = (obj) => { console.log(obj.name, " age is ", obj.age) }
_.each(studentList, displayAge) — перебор массива объектов с помощью указанной выше функции.
# Output John age is 10 Jane age is 11 Bob age is 12 Alice age is 10 Pete age is 11
_.sample(_.map(studentList, ‘name’)) — возвращает случайное имя из списка имен.
# Output Jack
_.sampleSize(_.map(studentList, ‘name’), 2) — возвращает случайный массив имен размера 2 из заданного массива имен.
# Output [ 'Bob', 'Jack' ]
_.values(studentList[0]) — возвращает массив значений заданного объекта.
# Output [1, 'John', 10]
_.keys(studentList[0]) — возвращает массив ключей заданного объекта.
# Output ['id', 'name', 'age']
_.partition(studentList, el =› { return el[‘age’] ‹= 11}) — возвращает разбиение массива объектов на основе возраста. В этом случае учащиеся [возраст ≤ 11] и [возраст › 11]
# Output parts: [ [ { id: 1, name: 'John', age: 10 }, { id: 2, name: 'Jane', age: 11 }, { id: 4, name: 'Alice', age: 10 }, { id: 5, name: 'Pete', age: 11 } ], [{ id: 3, name: 'Bob', age: 12 }] ]
_.reject(studentList,{age: 10}) — возвращает массив объектов, исключая объект, соответствующий критериям.
# Output [ { id: 2, name: 'Jane', age: 11 }, { id: 3, name: 'Bob', age: 12 }, { id: 5, name: 'Pete', age: 11 } ]
_.pickBy() — выбирает объект, соответствующий критериям.
_.map( studentList, obj => _.pickBy(obj, (v, k) => _.startsWith(v, "J"))) .filter(value => !_.isEmpty(value)) # Output [ { name: 'John' }, { name: 'Jane' } ]
ментальная карта