1.1.0 • Published 3 months ago

@terron/utils v1.1.0

Weekly downloads
-
License
ISC
Repository
-
Last release
3 months ago

Установка

После установки пакета (npm i @terron/utils) достаточно включить его в ваш главный файл, и он начнёт свою работу:

require('@terron/utils')
//Ваш код далее

Описание

Данный пакет добавляет уже существующим классам JavaScript (Number, String, Array, Boolean, Object, Date) дополнительные методы, отсутсвующие изначально (либо не раскрыты), а также упрощающие некоторый другой функционал.

Что было добавлено в обновлении?

  1. Необязательные аргументы указаны в квадратных скобках.
  2. Методы для process.
  3. Number: Number.prototype.isInteger().
  4. Date: Date.prototype.format(), Date.prototype.getQuater().
  5. Object: Object.prototype.isEmpty().
  6. Array: Array.prototype.isEmpty(), Array.prototype.middle(), Array.prototype.middleIndex().

Number

Number.random(min: integer, max: integer)

Возвращает случайное число между двумя указанными (включая их самих).

Number.random(0, 1) // 1
Number.random(20, 100) // 68

Number.randomFloat(min: integer, max: integer, length: integer)

Возвращает случайный флот (число с другим числом после точки) между двумя указанными (включая только минимальное), а также можно указать, сколько цифр после точки функция должна вернуть (изначально 3).

Number.randomFloat(1, 2) // 1.482
Number.randomFloat(1, 5, 2) // 4.85
Number.randomFloat(1, 50, 6) // 26.759242

Number.diff(num1: integer, num2: integer)

Сравнивает два указанных числа и возвращает их различие в числовом виде.

Number.diff(1, 2) // 1
Number.diff(2, 1) // 1
Number.diff(5, 9) // 4

Number.prototype.clamp(num1: integer, num2: integer)

Проверяет число между двумя аргументами. Если оно больше максимального, то функция вернёт второй аргумент, а если меньше минимального, то соответственно вернёт минимальное. В противном случае вернётся изначальное число.

let num = 25
num.clamp(1, 99) // 25, т.к число находится в радиусе двух указанных чисел
num.clamp(5, 20) // 20, т.к число больше второго аргумента
num.clamp(60, 80) // 60, т.к число меньше первого аргумента

Number.prototype.isOdd() / Number.prototype.isEven()

Первый метод возвращает булевое значение (true или false) в зависимости от того, является ли число нечётным. isEven() является обратной функцией.

let num = 10
let num2 = 17
num.isOdd() // false, т.к число чётное, а нужно, чтоб было нечётным
num.isEven() // true, т.к число чётное и соотвествует проверке в функции

num2.isOdd() // true, т.к число нечётное, что и нужно по условию функции

Number.prototype.roundTo(num: integer)

Округляет число (флот) до определённой цифры. Обратите внимание, что 0 в конце автоматически округляется и пропадает.

let num = 1.0245
num.roundTo(2) // 1.02
num.roundTo(1) // По идеи должно вернуть 1.0, но как я указал выше - ноль пропадает и вернётся просто 1
num.roundTo(9) // 1.0245 из-за условия выше, которое невозможно убрать из-за особенностей языка

Number.prototype.isPalindrome()

Проверяет, является ли число палиндромом (значение, которое в обратном порядке является таким же, что и изначальное). Не работает на слишком большие числа!

(123321).isPalindrome() // true, в обратную сторону читается также
(173).isPalindrome() // false, т.к не читается в обратную сторону также
(11).isPalindrome() // true, в обратную сторону читается также
(0).isPalindrome() // true, в обратную сторону читается также

Number.prototype.isHarshad()

Функция проверяет, делится ли число на сумму своих цифр без остатка, и возвращает соответствующий результат.

(18).isHarshad() // true, потому что 18 делится на 9 (1 + 8) без остатка
(19).isHarshad() // false, потому что 19 не делится на 10 (1 + 9) без остатка

Number.prototype.isBetween(num1: number, num2: number)

Функция проверяет, находится ли число в указаном разбросе двух чисел-аргументов.

let num = 25
num.isBetween(1, 30) // true, потому что 25 >= 1 и <= 30
num.isBetween(26, 30) // false, потому что 25 < 26

Number.prototype.isFloat()

Проверяет, является ли число флотом (число с цифрами после точки).

(13840).isFloat() // false, нет чисел после точки
(5.2).isFloat() // true, потому что есть 2 после точки

Number.prototype.isInteger()

Проверяет, является ли число интегером (число без цифр после точки).

(13840).isInteger() // true, нет чисел после точки
(5.2).isInteger() // false, потому что есть 2 после точки

Number.prototype.toOrdinal()

Возвращает порядковый номер числа (на английском языке).

(123).toOrdinal() // 123rd
(1).toOrdinal() // 1st
(56).toOrdinal() // 56th
(22).toOrdinal() // 22nd

Number.prototype.toRoman()

Возвращает число в римской системе счисления.

(5).toRoman() // V
(18).toRoman() // XVIII

Number.prototype.isPrime()

Проверяет, является ли число простым.

(3).isPrime() // true
(6).isPrime() // false
(17).isPrime() // true

Boolean

Boolean.random()

Возвращает случайное логическое значение.

Boolean.random() // true
Boolean.random() // true
Boolean.random() // false

Boolean.prototype.toNumber()

Возвращает логическое значение ввиде числа.

(true).toNumber() // 1
(false).toNumber() // 0

Boolean.prototype.or / Boolean.prototype.and(condition: boolean)

Логические операции, проверяющие условия двух булевых значений благодаря функциям (альтернатива || и &&).

let bool = 1 > 2
let bool2 = Infinity > 5

bool.or(bool2) // true, т.к bool2 является истиной
bool.and(bool2) // false, т.к bool является ложью

Date

Date.isLeapYear(year: integer)

Проверяет, является ли год високосным.

Date.isLeapYear(2024) // true
Date.isLeapYear(2022) // false

Date.prototype.isToday()

Проверяет, является ли дата сегодняшней.

let date = new Date();
date.isToday() // true

Date.prototype.addYears / Date.prototype.addMonths / Date.prototype.addWeeks / Date.prototype.addDays / Date.prototype.addHours / Date.prototype.addMinutes / Date.prototype.addSeconds(num: integer)

Добавляет к дате значение.

let date = new Date() // 10.02.2024 21:52:00
date.addYears(1) // 10.02.2025 21:52:00
date.addMonths(2) // 10.04.2024 21:52:00
date.addWeeks(1) // 17.04.2024 21:52:00
date.addDays(9) // 19.02.2024 21:52:00
date.addHours(2) // 10.02.2024 23:52:00
date.addMinutes(7) // 10.02.2024 21:59:00
date.addSeconds(57) // 10.02.2024 21:52:57

Date.prototype.daysInMonth()

Возвращает кол-во дней в месяце в текущей дате.

let date = new Date()
date.daysInMonth() // 29 (Февраль, високосный год)
date.addMonths(1).daysInMonth() // 31 (Март)

Date.prototype.format(format: string)

Возвращает дату в указанном формате.

YY - год\ MM - месяц\ DD - день\ HH - часы\ mm - минуты\ SS - секунды

let date = new Date();
date.format('Год: YY, Месяц: MM') // Год: 2024, Месяц: 2
date.format(`HH:mm`) // 19:17

Date.prototype.getQuater()

Возвращает время года даты в числовом формате.

1 - зима\ 2 - весна\ 3 - лето\ 4 - осень

new Date().getQuater() // 1

Object

Object.prototype.random()

Возвращает случайную пару ключ-значение из объекта.

let obj = { a: 1, b: 2, c: 3 }
obj.random() // { b: 2 }
obj.random() // { c: 3 }

Object.prototype.find(condition: bool)

Адаптация функции из Array.

let obj = { a: 1, b: 2, c: 3 }
obj.find((key, value) => key == 'a') // { a: 1 }
obj.find((key, value) => value == 3) // { c: 3 }
obj.find((key, value) => value == 38) // undefined, потому что пары по заданным условиям не обнаружено

Object.prototype.filter(condition: bool)

Адаптация функции из Array.

let obj = { a: 1, b: 2, c: 3, d: 2 }
obj.filter((key, value) => value == 2) // { b: 2, d: 2 }
obj.filter((key, value) => key != 'c' && value == 1) // { a: 1 }
obj.filter((key, value) => key == 't') // {}, потому что пар по заданным условиям не обнаружено

Object.prototype.size()

Возвращает длину объекта.

let obj = { a: 1, b: 2, c: 3, d: 2 }
obj.size() // 4

Object.prototype.invert()

Инвертирует объект (меняет местами ключи и их значения).

let obj = { a: 1, b: 2 }
obj.invert() // { 1: 'a', 2: 'b' }

Object.prototype.copy()

Копирует объект (создаёт объект, независимый от текущего).

let obj = { a: 1, b: 3 }
let obj2 = obj
obj === obj2 // true

obj2 = obj.copy()
obj === obj2 // false

Object.prototype.pick(keys: array)

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

let obj = { a: 1, b: 3, c: 8 }
obj.pick(['a', 'c']) // { a: 1, c: 8 }

Object.prototype.isEmpty()

Проверяет, является ли объект пустым.

{}.isEmpty() // true
{ a: 3 }.isEmpty() // false

String

String.random(length: integer, cases: array)

Генерирует случайные символы по заданым критериям.

String.random(5) // 5Gxju
String.random(3) // G9b

// Также у функции есть аргумент cases, в котором указываются все возможные случаи генерации.

String.random(5, cases = ['numbers', 'strings']) // 58a32
/* 
numbers - разрешает генерацию с цифрами
strings - разрешает генерацию с английскими буквами
specials - разрешает генерацию со специальными символами

По умолчанию установлены все случаи
*/

String.prototype.reverse()

"Переворачивает" строку.

'Hello'.reverse() // olleH

String.prototype.isPalindrome()

Альтернатива Number.prototype.isPalindrome(), только для строк.

'radar'.isPalindrome() // true, слово читается обраным случаем также 
'development'.isPalindrome() // false, слово не читается обраным случаем также

Array

globalThis.range / Array.range(length: integer, start: integer)

Создёт range (массив индексов).

Array.range(5) // [ 0, 1, 2, 3, 4 ]
range(3) // [ 0, 1, 2 ]
Array.range(3, 1) // [ 1, 2, 3 ]
Array.range(3, 2) // [ 2, 3, 4 ]

globalThis.list / Array.list(...values: any)

Создаёт массив с указанными значениями.

Array.list(1, 2, 3) // [1, 2, 3]
list(true, NaN, 'hello') // [true, NaN, 'hello']

Array.prototype.radius(from: integer, to: integer)

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

let fruits = ['apple', 'orange', 'lemon', 'kiwi']

let radius = fruits.radius(0, 1) // ['apple', 'orange']
let radius2 = fruits.radius(2, 3) // ['lemon', 'kiwi']
fruits.length // 4

Array.prototype.random()

Возвращает случайный элемент из массива.

let list = [1, 2, 3]
list.random() // 2

Array.prototype.diff(arr: array)

Возвращает массив из элементов, которые отсутствуют в arr.

let numbers = [1, 2, 3, 4, 5]
let arr = [1, 2, 3]
numbers.diff(arr) // [4, 5]

// Обратите внимание, что эта операция не является обратнопропорциональной

arr.diff(numbers) // []

Array.prototype.inter(arr: array)

Возвращает массив из элементов, которые существуют в arr.

let numbers = [1, 2, 3, 4, 5]
let arr = [1, 2, 3]
numbers.inter(arr) // [1, 2, 3]

// Обратите внимание, что эта операция является обратнопропорциональной

arr.inter(numbers) // [1, 2, 3]

Array.prototype.without(elements: array | string)

Создаёт новый массив на основе предыдущего без указаных элементов.

let array = [1, 2, 3, 4, 5]
array.without(1) // [2, 3, 4, 5]
array.without([1, 2, 3]) // [4, 5]

Array.prototype.last / Array.prototype.first()

Возвращает первый и последний элементы массива.

let fruits = ['apple', 'orange', 'lemon', 'kiwi']
fruits.first() // apple
fruits.last() // kiwi

Array.prototype.copy()

Возвращает копию массива, которая не зависит от изначального.

let arr = [1, 2, 3]
arr.copy() // [1, 2, 3]

Array.prototype.shuffle()

"Перемешивает" элементы массива. Обратите внимание, что перемешанный массив заменяет изначальный. Рекомендую использовать Array.prototype.copy() для избежания неприятностей.

let array = [1, 2, 3, 4]
array.shuffle() // [3, 4, 1, 2]
array.last() // 2

Array.prototype.sum()

Возвращает сумму всех элементов числового массива.

let array = [1, 2, 3]
array.sum() // 6

Array.prototype.average()

Возвращает среднее значение суммы всех элементов числового массива.

let array = [1, 2, 3]
array.average() // 2

Array.prototype.unique()

Возвращает массив с уникальными значениями.

let array = [1, 2, 1, 3, 3, 1, 1, 2, 3]
array.unique() // [1, 2, 3]

Array.prototype.chunk(size: integer)

Разбивает массив на подмассивы с определённым кол-вом элементов.

let array = [1, 2, 3, 4, 5]
array.chunk(2) // [ [1, 2], [3, 4], [5] ]

Array.prototype.rotate(value: integer)

"Перемещает" массив по кругу, где положительное число - с конца в начало, а отрицательное - с начала в конец.

let array = [1, 2, 3, 4, 5]
array.rotate(1) // [5, 1, 2, 3, 4]
array.rotate(2) // [4, 5, 1, 2, 3]
array.rotate(-2) // [3, 4, 5, 1, 2]

Array.prototype.compact()

Удаляет все ложные значения с массива.

let array = [1, 2, null, 3, 0, false, NaN, undefined, 4, '', 5]
array.compact() // [1, 2, 3, 4, 5]

Array.prototype.flatten()

"выравнивает" вложенные массивы, превращая их в один плоский массив.

let array = [1, [2, 3, [4] ], [5]] // [1, 2, 3, 4, 5]

Array.prototype.zip(arr: array)

Объединяет элементы исходного массива с другим.

let array = [1, 2, 3]
let arr = ['a', 'b', 'c']
array.zip(arr) // [ [1, 'a'], [2, 'b'], [3, 'c'] ]

Array.prototype.mddile()

Возвращает средние элементы массива.

[1, 2, 3] // 2
[1, 2, 3, 4] // [2, 3]

Array.prototype.mddileIndex()

Возвращает индекы средних элементов массива.

['a', 'b', 'c'] // 1
[1, 2, 3, 4] // [1, 2]

Array.prototype.isEmpty()

Проверяет, является ли массив пустым.

[].isEmpty() // true
Array(5).isEmpty() // true
[1].isEmpty() // false

process

process.repeat(times: integer, execute: function)

Выполняет процесс определённое кол-во раз.

process.repeat(3, function () {
    console.log('Hello')
}) // Три раза выведет Hello в консоль

process.repeat(3, function (index) {
    console.log(index)
}) // Выведет индекс процесса по счёту (начиная с 0)

process.wait / proccess.sleep(ms: integer)

Заставляет "ждать" процесс определённое кол-во времени. (Не работает внутри process.repeat!)

// Выполняется сразу
await wait(5000)
// Выполнится спустя 5 секунд.

wait(60000).then(function () {
    // выполнится спустя минуту.
})

Мой Discord ID: 1097169235295350936

1.1.0

3 months ago

1.0.3

3 months ago

1.0.2

4 months ago

1.0.1

4 months ago

1.0.0

4 months ago