# js-enumerate
**中文文档** | [English](README.md)
[](https://www.npmjs.com/package/js-enumerate)
[](https://www.npmjs.com/package/js-enumerate)
[](https://bundlephobia.com/package/js-enumerate)
[](https://www.npmjs.com/package/js-enumerate)
[](https://github.com/skylerhu/js-enum/actions/workflows/test.yml)
[](https://codecov.io/gh/skylerhu/js-enum)
[](https://github.com/skylerhu/js-enum/blob/master/LICENSE)
一个适用于 **Node.js** 和**浏览器**的 JavaScript 枚举工具。支持通过数组或对象快速构建类型安全、不可变的 Enum 实例,内置校验、迭代能力,并提供前端友好的数据转换方法,适用于下拉框、单选、多选、表格筛选等场景。
## 特性
- 支持**数组**和**普通对象**两种构造方式
- 成员默认**冻结**(不可变)
- 内置 `has()`、`getMember()`、`getLabel()` 校验与查找方法
- 可迭代 — 支持 `for...of`、`map`、`forEach`、`filter`
- 前端友好的 `options` / `filters` / `toFilters()`,适配 Ant Design、Element UI 等
- 通过 `Enum.register()` 全局注册
- 同时支持 Node.js (CommonJS) 和浏览器 (UMD)
## 安装
```bash
npm install js-enumerate
```
浏览器环境可直接引入 UMD 打包文件:
```html
```
> 可将 [releases/js-enumerate-latest.min.js](./releases/js-enumerate-latest.min.js) 上传至 CDN 或拷贝到项目中引用。
## 快速开始
```javascript
import Enum from 'js-enumerate';
const Color = new Enum([
{ key: 'RED', value: 'red', label: '红色' },
{ key: 'GREEN', value: 'green', label: '绿色' },
]);
Color.RED // 'red'
Color.GREEN // 'green'
Color.length // 2
Color.has('red') // true
Color.getLabel('red') // '红色'
// 迭代
Color.map(m => m.label); // ['红色', '绿色']
// 通过普通对象构造
const Status = new Enum({ Active: 1, Inactive: 0 });
Status.Active // 1
```
## 使用指南
### 构造函数
```javascript
new Enum(data, options)
```
| 参数 | 类型 | 说明 | 默认值 |
| --- | --- | --- | --- |
| data | array / object | 枚举成员数据 | — |
| options | object | 配置选项 | — |
**options 参数:**
| 参数 | 类型 | 说明 | 默认值 |
| --- | --- | --- | --- |
| freez | boolean | 是否冻结枚举实例及成员(冻结后不可修改) | `true` |
| allDefaultValue | object | "全部"选项的默认值(用于 `filters` / `getOptions`) | `{ key: '__ALL', value: '', label: '全部' }` |
> 注意:参数名为 `freez`(库内既有命名),不是 `freeze`。
### 全局注册
```javascript
Enum.register(); // global.Enum (Node.js) / window.Enum (浏览器)
Enum.register('JsEnum'); // window.JsEnum
```
### 前端组件集成
以 **React + Ant Design** 为例:
```jsx
import Enum from 'js-enumerate';
import { Select, Radio, Table } from 'antd';
const Color = new Enum([
{ key: 'RED', value: 'red', label: '红色' },
{ key: 'GREEN', value: 'green', label: '绿色' },
]);
const App = () => (
<>