**my common utils lib**

### 安装使用

```sh
npm install common-utils-y
```

```ts
import { isBoolean, isEmpty, enterFullscreen } from "common-utils-y";
```

**推荐使用 typescript**

默认使用 lib 目录下入口，包含浏览器方法

不需要 browser 目录方法可以使用`lib-node`目录

```ts
import { isBoolean, isEmpty } from "common-utils-y/lib-node";
```

![代码提升方便使用](jsdoc.png)

### 已有的方法

| 目录     | 方法                                                                  |
| -------- | --------------------------------------------------------------------- |
| array    | 数组的常用方法，如 uniqueArray、getUniqueArray                        |
| number   | 数字处理， 如 getRandomInt                                            |
| string   | 字符串处理，如 capitalizeFirstLetter、toCamelStyle                    |
| object   | 对象方法，如 deepCopy                                                 |
| function | 函数，如 debounce、 throttle                                          |
| date     | 日期方法，如 formatDate                                               |
| types    | 数据类型判断，如 isBigInt、isBoolean                                  |
| browser  | 浏览器 api， 如 enterFullscreen、exitFullscreen、getFullscreenElement |

#### 数组(array)

**数组相关方法**

| 方法           | 说明                                                           |
| -------------- | -------------------------------------------------------------- |
| uniqueArray    | 简单数据数组去重方法，适用于数字、字符串等类型数组             |
| getUniqueArray | 根据 key 属性去重对象数组                                      |
| findPathInTree | 查找树形数据中从根节点到目标节点的完整路径，未找到则返回空数组 |

#### 数字(number)

**数字相关方法**

| 方法         | 说明                           |
| ------------ | ------------------------------ |
| getRandomInt | 获取两个数字间的随机整数值     |
| addCommas    | 数字添加千分符，小数部分不处理 |
| add          | 多个数字相加，包含精度处理     |
| subtract     | 多个数字相减，包含精度处理     |
| multiply     | 多个数字相乘，包含精度处理     |
| divide       | 多个数字相除，包含精度处理     |

#### 字符串(string)

**字符串相关方法**

| 方法                  | 说明                   |
| --------------------- | ---------------------- |
| capitalizeFirstLetter | 字符串首字母大写       |
| toCamelStyle          | 将字符串转为小驼峰写法 |
| escapeHTML            | 将字符串 HTML 转义     |
| escapeCSS             | 将字符串 css 转义      |
| escapeJS              | 将字符串 js 转义       |

#### 对象(object)

**对象相关方法**

| 方法     | 说明                                                                 |
| -------- | -------------------------------------------------------------------- |
| deepCopy | 深拷贝函数，支持处理日期、数组、正则表达式、Map、Set，函数则直接返回 |

#### 函数(function)

**函数相关方法**

| 方法     | 说明                             |
| -------- | -------------------------------- |
| debounce | 防抖函数，支持取消执行           |
| throttle | 节流函数，支持立即执行和尾部执行 |

#### 日期(date)

**日期相关方法**

| 方法        | 说明                           |
| ----------- | ------------------------------ |
| isDate      | 判断是否日期对象               |
| isValidDate | 判断是否为合法日期对象         |
| formatDate  | 将日期对象格式化为自定义字符串 |

**日期格式化支持的符号**

| 符合 | 说明                        | 示例                                     |
| ---- | --------------------------- | ---------------------------------------- |
| yyyy | 4 位年份                    | 2025                                     |
| yy   | 2 位年份                    | 25                                       |
| MM   | 2 位月份（补零）            | 01-12                                    |
| M    | 月份（不补零）              | 1-12                                     |
| dd   | 2 位日期（补零）            | 01-31                                    |
| d    | 日期（不补零）              | 1-31                                     |
| HH   | 2 位小时（24 小时制，补零） | 00-23                                    |
| H    | 小时（24 小时制，不补零）   | 0-23                                     |
| hh   | 2 位小时（12 小时制，补零） | 01-12                                    |
| h    | 小时（12 小时制，不补零）   | 1-12                                     |
| mm   | 2 位分钟（补零）            | 00-59                                    |
| m    | 分钟（不补零）              | 0-59                                     |
| ss   | 2 位秒（补零）              | 00-59                                    |
| s    | 秒（不补零）                | 0-59                                     |
| a    | 上午/下午                   | 上午/下午                                |
| Q    | 季度                        | 1-4                                      |
| w    | 星期                        | '日', '一', '二', '三', '四', '五', '六' |

#### 类型(type)

**类型相关方法**

| 方法       | 说明                             |
| ---------- | -------------------------------- |
| isBoolean  | 判断参数是否为布尔值             |
| isNumber   | 判断参数是否为数字               |
| isString   | 判断参数是否为字符串             |
| isFunction | 判断参数是否为函数               |
| isBigInt   | 判断参数是否为 bigInt            |
| isArray    | 判断参数是否为数组               |
| isEmpty    | 判断参数是否为 null 或 undefined |

#### 浏览器(browser)

**浏览器相关方法**

| 方法                 | 说明                           |
| -------------------- | ------------------------------ |
| enterFullscreen      | 请求进入全屏                   |
| exitFullscreen       | 请求退出全屏                   |
| getFullscreenElement | 获取当前全屏元素               |
| addResizeObserve     | 监听元素尺寸变化并执行回调函数 |
| removeResizeObserve  | 取消监听尺寸的回调函数         |

### 规划

后续补充一些常用的基础方法，方便不同项目开发。

包括不同数据类型的常用工具封装，以及不同浏览器兼容性 api 的进一步封装。

欢迎各位大佬帮助补充、纠偏。。。
