Как и в случае с любыми другими приложениями, при написании приложений на JavaScript приходится решать сложные проблемы.
В этой статье мы рассмотрим некоторые решения распространенных проблем с JavaScript.
Цель требования
require
не входит в стандартный API.
Он используется для импорта членов из других модулей в Node.js.
Модули - это способ разделить приложение на отдельные файлы вместо того, чтобы хранить все приложения в одном файле.
Есть разница между структурой приложений браузера и Node.
Браузерные приложения загружаются из тегов скриптов.
Скрипты имеют прямой доступ к глобальному пространству имен.
В приложениях Node каждый модуль имеет свою область действия. К элементам в группе можно получить доступ, если они не экспортированы с помощью modulee.exports
или exports
и не требуются.
Для импорта модуля мы используем функцию require
.
Мы можем потребовать модули из нашего собственного приложения или запросить пакеты от Node.
Большинство пакетов Node устанавливаются из NPM.
Пакеты находятся в папке node_modules
.
Проверить, пуст ли объект
Есть несколько способов проверить, пуст ли объект.
Например, мы можем написать:
obj === null
чтобы проверить, является ли объект null
.
Мы также можем написать:
typeof obj !== 'object'
чтобы проверить, не является ли obj
объектом.
Кроме того, мы можем использовать getOwnPropertyNames
, чтобы получить ненаследуемые имена строковых свойств объекта в виде массива.
Итак, мы можем написать:
Object.getOwnPropertyNames(obj).length === 0
чтобы проверить, что возвращенный массив пуст.
Кроме того, мы можем использовать Object.keys
, чтобы сделать то же самое:
Object.keys
(obj).length === 0
Сгруппируйте массив объектов по их ключу
Мы можем сгруппировать массив объектов по их ключу, поместив значения записей массива в качестве ключей нового объекта.
Затем мы получаем записи массива из свойства со значением в с заданным ключом в объекте.
Например, мы можем написать:
const groupBy = (items, key) => items.reduce( (result, item) => ({ ...result, [item[key]]: [ ...(result[item[key]] || []), item, ], }), {}, );
Теперь у нас есть такой массив:
const arr = [{ foo: 'dog', bar: 2 }, { foo: 'cat', bar: 2 }, { foo: 'dog', bar: 3 }, { foo: 'cat', bar: 4 }, ]
Мы можем вызвать метод groupBy
, написав:
const result = groupBy(arr, 'foo');
Тогда result
будет:
{ "dog": [ { "foo": "dog", "bar": 2 }, { "foo": "dog", "bar": 3 } ], "cat": [ { "foo": "cat", "bar": 2 }, { "foo": "cat", "bar": 4 } ] }
Мы сгруппировали наш массив по свойству foo
.
И значение каждого ключа - это массив с записями со значением foo
, заданным ключом.
Разделить строку несколькими разделителями
Мы можем использовать метод split
с регулярным выражением со всеми разделителями, которые мы хотим сопоставить, чтобы разделить строку по всем перечисленным разделителям.
Например, мы можем написать:
"foo bar, baz".split(/[\s,]+/)
Тогда получаем:
["foo", "bar", "baz"]
Поскольку у нас есть образец пробела и запятая в регулярном выражении.
Разница между методом класса и методом прототипа класса
Есть различия между:
Class.method = function () { //... }
а также:
Class.prototype.method = function () { //... }
Class.method
означает, что method
метод является статическим методом Class
.
Таким образом, мы можем вызвать его напрямую, не создавая его новый экземпляр.
Например, мы можем написать:
Class.method();
С другой стороны, Class.prototype.method
- это метод экземпляра Class
.
Это означает, что мы должны создать экземпляр Class
, чтобы использовать его.
Например, мы можем написать:
const obj = new Class();
Затем вызываем Class.prototype.method
, написав:
obj.method();
Получите расширение файла по имени файла
Если у нас есть строка имени файла, мы можем вызвать split
, чтобы разделить имя файла точкой, чтобы получить имя и расширение файла.
Последняя запись возвращенного массива будет расширением.
Итак, мы можем написать:
const ext = filename.split('.').pop();
Мы вызываем pop
, чтобы вернуть последнюю запись массива, возвращенного split
, чтобы получить расширение.
Заключение
Мы можем получить расширение файла из имени файла, используя split
.
Есть разница между методами, прикрепленными к prototype
, и методами, которые прикреплены непосредственно к классу.
Мы можем сгруппировать записи массива по значению ключа записи, используя методы массива.