# js-enumerate **中文文档** | [English](README.md) [![NPM Version](https://img.shields.io/npm/v/js-enumerate)](https://www.npmjs.com/package/js-enumerate) [![NPM Downloads](https://img.shields.io/npm/dm/js-enumerate)](https://www.npmjs.com/package/js-enumerate) [![Bundle Size](https://img.shields.io/bundlephobia/minzip/js-enumerate)](https://bundlephobia.com/package/js-enumerate) [![Node Version](https://img.shields.io/node/v/js-enumerate)](https://www.npmjs.com/package/js-enumerate) [![Test](https://github.com/skylerhu/js-enum/actions/workflows/test.yml/badge.svg?branch=master)](https://github.com/skylerhu/js-enum/actions/workflows/test.yml) [![Codecov](https://codecov.io/gh/skylerhu/js-enum/graph/badge.svg)](https://codecov.io/gh/skylerhu/js-enum) [![License](https://img.shields.io/github/license/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 = () => ( <>