# 📜🛠️mahmud-js-tools🛠️📜

mahmud-js-tools 是一个简单而实用的 JavaScript 工具库，包含多种常用的工具函数，如🎯深拷贝对象、🎯防抖函数、🎯比较对象、🎯节流函数、🎯生成随机数、🎯格式化时间、🎯验证 URL、🎯数组去重、🎯首字母大写、🎯驼峰命名转换、🎯打乱数组顺序和🎯异步延迟等。
<p align="center">
  <a href="https://www.npmjs.com/package/mahmud-js-tools"><img src="https://img.shields.io/npm/v/js-booster.svg" alt="Version"></a>
  <a href="https://www.npmjs.com/package/mahmud-js-tools"><img src="https://img.shields.io/npm/dm/js-booster.svg" alt="Downloads"></a>
  <a href="https://github.com/cg-zhou/mahmud-js-tools/blob/main/LICENSE"><img src="https://img.shields.io/npm/l/js-booster.svg" alt="License"></a>
</p>

[English](./README.en.md) | 简体中文

## 特性

- 🚀 **高性能虚拟滚动** - 轻松渲染百万级数据，保持流畅的滚动体验
- 🔄 **动态高度适配** - 自动处理超大数据集，防止DOM高度溢出
- 🎯 **简单易用API** - 直观的接口设计，快速集成到任何项目
- 📦 **轻量级** - 无依赖，体积小，加载快
- 🔧 **高度可定制** - 支持自定义渲染函数，满足各种UI需求



## 目录结构

. ├── dist │ ├── index.js │ └── index.js.map ├── src │ ├── index.js │ └── test.js ├── .gitignore ├── LICENSE ├── README.md └── package.json

## 功能列表

| 函数名       | 描述                     | 示例                       |
| ------------ | ------------------------ | -------------------------- |
| `deepClone`  | 深拷贝对象               | `deepClone({a: 1})`        |
| `cloneArray` | 深拷贝数组               | `cloneArray([1, {b: 2}])`  |
| `debounce`   | 防抖函数                 | `debounce(fn, 300)`        |
| `throttle`   | 节流函数                 | `throttle(fn, 300)`        |
| `isEqual`    | 比较两个对象是否相等     | `isEqual(obj1, obj2)`      |
| `random`     | 生成指定范围的随机数     | `random(1, 10)`            |
| `formatTime` | 格式化时间戳为可读字符串 | `formatTime(1620000000)`   |
| `isUrl`      | 验证 URL 是否有效        | `isUrl('https://...')`     |
| `unique`     | 数组去重                 | `unique([1, 2, 2, 3])`     |
| `capitalize` | 将字符串首字母大写       | `capitalize('hello')`      |
| `camelCase`  | 将字符串转换为驼峰命名法 | `camelCase('hello-world')` |
| `shuffle`    | 打乱数组顺序             | `shuffle([1, 2, 3, 4])`    |
| `sleep`      | 异步延迟（Promise）      | `await sleep(1000)`        |

## 📜安装

您可以使用 npm 来安装这个库：

```bash
npm install mahmud-js-tools

```
### 🛠️CDN

```html
<!-- 生产环境（压缩版） -->
<!-- <script src="https://unpkg.com/mahmud-js-tools@1.0.4/dist/index.min.js"></script> -->
     <script src="https://unpkg.com/mahmud-js-tools@1.0.12/dist/index.js"></script>


<!-- 开发环境（未压缩） -->
<!-- <script src="https://unpkg.com/mahmud-js-tools@1.0.4/dist/index.js"></script> -->
     <script src="https://unpkg.com/mahmud-js-tools@1.0.12/dist/index.js"></script>

```


## 🚀使用
![alt text](image.png)
![alt text](image-1.png)
![alt text](image-2.png)
![alt text](image-3.png)
![alt text](image-4.png)
![alt text](image-5.png)
![alt text](image-6.png)

### deepClone  用于深拷贝对象。

```javascript
const { deepClone } = require('mahmud-js-tools');

const obj = { a: 1, b: { c: 2 } };
const cloned = deepClone(obj);
console.log(cloned); // { a: 1, b: { c: 2 } }
console.log(cloned === obj); // false

```

### cloneArray 用于深拷贝数组。

```javascript
const { cloneArray } = require("mahmud-js-tools");

const arr = [1, { b: 2 }];
const clonedArr = cloneArray(arr);
console.log(clonedArr); // [1, { b: 2 }]
console.log(clonedArr === arr); // false
```

### debounce 用于防抖函数。

```javascript
const { debounce } = require("mahmud-js-tools");

const mockFn = jest.fn();
const debouncedFn = debounce(mockFn, 100);

debouncedFn();
setTimeout(() => {
  console.log(mockFn.mock.calls.length); // 1
}, 200);
```

### throttle 用于节流函数。

```javascript
const { throttle } = require("mahmud-js-tools");

const mockFn = jest.fn();
const throttledFn = throttle(mockFn, 100);

throttledFn();
throttledFn();

setTimeout(() => {
  console.log(mockFn.mock.calls.length); // 1
}, 200);
```

### isEqual 用于比较两个对象是否相等。

```javascript
const { isEqual } = require("mahmud-js-tools");

const obj1 = { a: 1, b: { c: 2 } };
const obj2 = { a: 1, b: { c: 2 } };
const obj3 = { a: 1, b: { c: 3 } };

console.log(isEqual(obj1, obj2)); // true
console.log(isEqual(obj1, obj3)); // false
```

### random 用于生成指定范围的随机数。

```javascript
const { random } = require("mahmud-js-tools");

console.log(random(1, 10)); // 随机数在 1 到 10 之间
```

### formatTime 用于格式化时间戳为可读字符串。

```javascript
const { formatTime } = require("mahmud-js-tools");

console.log(formatTime(1620000000000)); // 2021-05-03 00:00:00
```

### isUrl 用于验证 URL 是否有效。

```javascript
const { isUrl } = require("mahmud-js-tools");

console.log(isUrl("https://google.com")); // true
console.log(isUrl("not-a-url")); // false
```

### unique 用于数组去重。

```javascript
const { unique } = require("mahmud-js-tools");

console.log(unique([1, 2, 2, 3])); // [1, 2, 3]
```

### capitalize 用于将字符串首字母大写。

```javascript
const { capitalize } = require("mahmud-js-tools");

console.log(capitalize("hello")); // Hello
```

### camelCase 用于将字符串转换为驼峰命名法。

```javascript
const { camelCase } = require("mahmud-js-tools");

console.log(camelCase("hello-world")); // helloWorld
```

### shuffle 用于打乱数组顺序。

```javascript
const { shuffle } = require("mahmud-js-tools");

const arr = [1, 2, 3, 4];
const shuffledArr = shuffle(arr);
console.log(shuffledArr); // 随机打乱后的数组
```

### sleep 用于异步延迟。

```javascript
const { sleep } = require("mahmud-js-tools");

async function testSleep() {
  const start = Date.now();
  await sleep(1000);
  const end = Date.now();
  console.log(end - start); // 1000 或更接近的值
}

testSleep();
```

## 🧪单元测试

项目使用 Jest 进行完整测试，运行以下命令执行测试：

```bash
npm run test
```

## 🤝贡献指南

欢迎对这个项目进行贡献！请遵循以下步骤：

1. Fork 本仓库。
2. 创建新分支 (`git checkout -b feature/your-feature`)。
3. 提交更改 (`git commit -m 'Add some feature'`)。
4. 推送分支 (`git push origin feature/your-feature`)。
5. 提交 Pull Request。

- 🎯 **欢迎访问我的技术博客：**-  © https://gitee.com/mahmudtjcu 
- 🎯 **欢迎访问我的Gitee：**-   © https://www.cnblogs.com/mahmud

## 📜许可证

本项目使用 [MIT 许可证](LICENSE)。 

