# CommonBase

> 基础工具类：类型判断、JSON操作、数组/字符串格式化

- **引入**: `import { CommonBase } from '@cldemo/library/common'`

## 方法

| 方法 | 说明 |
|------|------|
| `getTypeof(value: any)` |  |
| `isUndefined(value: any)` | 判断是否 undefined |
| `isBoolean(value: any)` | 判断是否布尔值 |
| `isString(value: any)` | 判断是否字符串 |
| `isFunction(value: any)` | 判断是否函数 |
| `isObject(value: any)` | 判断是否对象 |
| `isBlob(value: any)` |  |
| `isFile(value: any)` |  |
| `isNumber(value: any)` | 判断是否数字（含数字格式校验） |
| `isInt(value: number)` | 判断是否整数 |
| `isHtml(value: string)` | 判断是否 HTML 字符串 |
| `isJson(value: any)` | 判断是否 JSON 字符串 |
| `isWindow(obj: any)` |  |
| `isArray(value: any)` | 判断是否数组 |
| `isLocationLngLat(value: any)` | 判断经纬度格式 [lng, lat] |
| `isEmpty(value: any, def?: any)` | 判断 null/undefined/空串/空数组/空对象 |
| `isEqual(value1: any, value2: any)` | 深度比较两个值是否相等 |
| `isEqualArr(arr1: any[], arr2: any[], isInOrder = false)` | 比较两个数组（可选是否按顺序） |
| `isEqualList(list1: any[], list2: any[], key = ["id"])` | 按 key 比较两个对象列表 |
| `isContainArr(arr1: any[], arr2: any[])` | arr1 是否包含 arr2 所有元素 |
| `isExistValue(value: any, key: string)` | 数组中是否存在指定值 |
| `isExistJsonKey(json: any, key: string)` | JSON 中是否存在指定 key |
| `osType()` | 返回 { isPc, isMobile, isIOS, isAndroid, isTablet } |
| `trim(value: any)` | 去首尾空格 |
| `split(str: string, sign = ",")` | 分割字符串（兼容中文逗号 `，` → `,`） |
| `kebabCase(value: string)` | 大驼峰转 kebab-case |
| `getByteLen(str: string)` | 获取字符串字节长度 |
| `getJsonClone()` | 浅/深拷贝，opt 支持 excludeKeys |
| `getJsonCloneByKeyArr(sourceJson: any, keyArr: string[])` | 按指定 key 克隆 |
| `getJsonCloneByKeyJson(sourceJson: any, keyJson: any)` |  |
| `getJsonCloneByRemoveArr(sourceJson: any, removeArr: string[])` | 去除指定 key 后克隆 |
| `getJsonMerge(...target: any)` | 浅合并多个 JSON |
| `getJsonReversal(json: any)` | key-value 反转 |
| `getJsonMergeDeep(...target: any)` | 深度合并多个 JSON |
| `getJsonMap(json: any, map: any, isDef = false)` | 按映射规则转换 JSON |
| `getJsonByList(list: any, key?: string, isFormat = false)` | 列表转 JSON（以 key 为键） |
| `getJsonByArr(arr: string[])` | 数组转 JSON（值为 true） |
| `getGroupByList(list: any, key: string)` | 按 key 分组 |
| `getJsonByBlob(blob: any)` | Blob 转 JSON |
| `getBase64ByFile(files: any)` | File 转 Base64 |
| `getTreeList(list: any[])` | 列表转树形结构 |
| `getTreeLastParent(id: string, json: any, isShowSelf = true)` | 查找末级父节点链 |
| `getListByTree()` | 树转列表 |
| `getListClone(list: any, isDeep = false)` | 复制列表 |
| `getListMergeDeep(newList: any[], oldList: any[], key = "id")` | 深度合并列表 |
| `getRecursionParentList(json: any, pId: [string, number], pKey = "parentId")` | 递归获取所有父级 |
| `getListExistValue(list: any, value: string, key = "id")` | 查找列表中指定值 |
| `getArrClone(arr: any)` | 复制数组 |
| `getArrByList(list: any[], key = "id")` | 提取 list 指定字段为数组 |
| `getArrRemoveById(arr: any, ids: any)` | 按 id 移除元素 |
| `getArrByMinMax(min = 1, max: number)` | 生成范围数组 |
| `getArrUnique(arr: any)` | 数组去重 |
| `getArrConvertJson(arr: any[])` | 数组转 JSON（键为数组值） |
| `getArrAsc(arr: any, type: string)` | 升序排序（date/number/string） |
| `getArrDesc(arr: any, type: string)` | 降序排序 |
| `getZeroCount(len: number)` | 生成指定长度的零字符串 |
| `getFillZero(value: any, len = 2, around = "l")` | 补零（l 左 / r 右） |
| `getRandom(len = 3)` | 固定长度随机数 |
| `getRandomRange(min: number, max: number, isRound = true)` | 范围随机数 |
| `getCaptcha(len = 6)` | 生成验证码 |
| `getValueByFormat()` | 统一格式化入口（num/int/float/float2/date/string） |
| `getHourInterval(start: any, end: any = "")` | 小时区间格式化 |
| `getFormatThousands(value: any)` | 千分位格式化 |
| `getNumCeil()` | 进位/舍入处理 |
| `removeReplace(value: any, key = ",")` | 移除字符串中指定字符 |
| `conversionEmptyZero(json: any, mapKey: string[], optExt?: any)` | 空值转 0 |
| `conversionPercentage(json: any, mapKey: string[], isMultiply = true)` | 百分比转换 |
| `convertStringFormat(strFormat: string, json: any)` | `${key}` 模板替换 |

