JavaScript 前端枚举库 js-enumerate

2024-04-26 03:12

本文主要是介绍JavaScript 前端枚举库 js-enumerate,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

JavaScript 前端枚举库js-enumerate

    • 1. 安装
      • 1.1 NodeJS
      • 1.2 Bower
    • 2 使用
      • 2.1 constructor构造函数
      • 2.2 register全局注册
      • 2.3 用法示例
      • 2.4 前端组件中使用
      • 2.5 其他扩展用法
      • 2.6 内置属性
      • 2.7 Enum object API
      • 2.8 其他注意事项
    • 3. 推荐

Enum is a javascript enumeration module. It works with Node.js and the browser.

构建Enum对象在JavaScript中使用,可用于枚举定义,前端组件单选、多选等的options选项的定义。

1. 安装

可查看版本变更记录ChangeLog

1.1 NodeJS

npm install js-enumerate

import * as Enum from 'js-enumerate';new Enum([{ key: 'RED', value: 'red', label: '红色' },{ key: 'GREEN', value: 'green', label: '绿色' },
]);
// 也可使用字典构造
new Enum({Red: 'red',green: 'green',
});

1.2 Bower

<script src="../releases/js-enumerate-latest.min.js"></script>
<script>new Enum([{ key: 'RED', value: 'red', label: '红色' }]);
</script>

ps: 可自行将 releases/js-enumerate-latest.min.js 文件上传到CDN、或者拷贝到项目里引用。

2 使用

2.1 constructor构造函数

new Enum(data, options)

参数说明:

参数类型说明默认值版本
dataarray/object初始化枚举成员
optionsobject配置选项

options参数说明

参数类型说明默认值版本
freezbool初始化枚举成员,只读不允许修改true
allDefaultValueobject定义刷选默认"全部"的场景{ key: ‘__ALL’, value: ‘’, label: ‘全部’ }

2.2 register全局注册

// 在nodejs中定义 global.Enum
// 在浏览器中定义 window.Enum
Enum.register();
// 可以通过key更改对象的名称
Enum.register("JsEnum"); // window.JsEnum

2.3 用法示例

const Color = new Enum([{ key: 'RED', value: 'red', label: '红色' },{ key: 'GREEN', value: 'green', label: '绿色' },
]);
// 使用成员值
Color.RED // 'red'
Color.GREEN // 'green'
// 成员个数
Color.length // 2Color.toJSON(); // 返回数组 [{"key":"RED","value":"red","label":"红色"},{"key":"GREEN","value":"green","label":"绿色"}]
JSON.stringify(Color); // 返回字符串 '[{"key":"RED","value":"red","label":"红色"},{"key":"GREEN","value":"green","label":"绿色"}]'// 获取成员
const member = Color.getMember('red'); // 返回单个成员对象 {"key":"RED","value":"red","label":"红色"}
member.value === 'red'; // true
member.key; // 'RED'
member.label; // '红色'
Color.getLabel(Color.RED); // '红色'// 判断枚举值是否合法
Color.has('red'); // true
Color.has('yellow'); // false// map,forEach和filter函数都可直接使用
Color.map(member => member.label); // ['红色', '绿色']
// 属性成员来自定义枚举的key
Object.keys(Color); // ['RED', 'GREEN']
// 用in是遍历keys
for (const key in Color) {console.log(key);
}
// 用of是遍历成员对象
for (const member of Color) {console.log(member);
}// 使用字典构造
const ColorV2 = new Enum({Red: 'red',green: 'green',
});
ColorV2.toJSON(); // [{"key":"Red","value":"red"},{"key":"blue","value":"blue"}]
// 注意区分大小写,字典属性字段为成员的key
ColorV2.Red // 'red'
ColorV2.green // 'green'

2.4 前端组件中使用

使用React + Ant Design举例:

import React from 'react';
import { Select, Radio, Table } from 'antd';
// 可以直接在index.js入口文件中执行Enum.register(),即可全局使用;
import Enum from 'js-enumerate';const Color = new Enum([{ key: 'RED', value: 'red', label: '红色' },{ key: 'GREEN', value: 'green', label: '绿色' },
]);
// 依次应用于 下拉选项、单选框、表格字段的筛选菜单项
const App = () => (<>{/*使用filters可以选择“全部”*/}<Select defaultValue={Color.RED} options={Color.filters} /><Radio.Group defaultValue={Color.GREEN} options={Color.options} /><Table colums={[{ key: 'color', title: '颜色', filters: Color.to_filters() }]}/></>
);

2.5 其他扩展用法

const Color = new Enum([{ key: 'RED', value: 'red', label: '红色', disabled: true, color: '#f00' },{ key: 'GREEN', value: 'green', label: '绿色', extra: { msg: '其他信息' }, color: '#0f0' },
]);
const redMem = Color.getMember(Color.RED);
redMem.disabled // true
redMem.color // '#f00'
const greenMem = Color.getMember(Color.GREEN);
greenMem.extra // { msg: '其他信息' }// 以下非读操作会报错
Color.RED = 'red-v2'; // Throws Error
delete Color.RED; // Throws Error
redMem.label = '大红色'; // Throws Error// 可以通过 options.freez 不冻结枚举实例
// 但不建议这么使用,容易出现不可预期的事情
const ColorEdit = new Enum([{ key: 'RED', value: 'red', label: '红色' },{ key: 'GREEN', value: 'green', label: '绿色' },
], { freez: false });
const redEdit = ColorEdit.getMember(ColorEdit.RED);
redEdit.label // '红色'
redEdit.label = '大红色' // true
redEdit.label // '大红色'

2.6 内置属性

  • length 枚举实例所有成员个数
  • options 可用于下拉选择的数组数据
  • filters 可用于刷选的数组数据,比options多一个value=''的成员

2.7 Enum object API

  • forEach,map,filter 这三个方法是对枚举成员迭代器进行遍历操作
  • getMember(value) 通过value获取成员对象
  • has(value) 值value是否在枚举定义的成员当中
  • getLabel(value) 通过value获取成员label用于展示
  • to_filters() 转换成ant design/element中表格table组件filters需要的刷选条件
  • getOptions(option = {}) 根据所有成员信息返回数组数据
  • Enum.register(key = 'Enum')类的静态方法,用于全局注册对象

2.8 其他注意事项

  • 成员key属性只能由数字、大小写字母、中横线、下划线组成的字符串,且不能以__开头;
  • 成员key属性不能使用内置属性字符串,例如length/options/filters不能使用;
  • 成员value不能为nullundefined
  • 成员label不能为null''
  • 枚举实例成员默认都被freez冻结,不允许修改;

3. 推荐

  • 若是后端是Python语言,推荐 py-enum 配合该lib一起使用

这篇关于JavaScript 前端枚举库 js-enumerate的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/936566

相关文章

Java 正则表达式URL 匹配与源码全解析

《Java正则表达式URL匹配与源码全解析》在Web应用开发中,我们经常需要对URL进行格式验证,今天我们结合Java的Pattern和Matcher类,深入理解正则表达式在实际应用中... 目录1.正则表达式分解:2. 添加域名匹配 (2)3. 添加路径和查询参数匹配 (3) 4. 最终优化版本5.设计思

Java使用ANTLR4对Lua脚本语法校验详解

《Java使用ANTLR4对Lua脚本语法校验详解》ANTLR是一个强大的解析器生成器,用于读取、处理、执行或翻译结构化文本或二进制文件,下面就跟随小编一起看看Java如何使用ANTLR4对Lua脚本... 目录什么是ANTLR?第一个例子ANTLR4 的工作流程Lua脚本语法校验准备一个Lua Gramm

Java字符串操作技巧之语法、示例与应用场景分析

《Java字符串操作技巧之语法、示例与应用场景分析》在Java算法题和日常开发中,字符串处理是必备的核心技能,本文全面梳理Java中字符串的常用操作语法,结合代码示例、应用场景和避坑指南,可快速掌握字... 目录引言1. 基础操作1.1 创建字符串1.2 获取长度1.3 访问字符2. 字符串处理2.1 子字

Java Optional的使用技巧与最佳实践

《JavaOptional的使用技巧与最佳实践》在Java中,Optional是用于优雅处理null的容器类,其核心目标是显式提醒开发者处理空值场景,避免NullPointerExce... 目录一、Optional 的核心用途二、使用技巧与最佳实践三、常见误区与反模式四、替代方案与扩展五、总结在 Java

Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案

《Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案》:本文主要介绍Vue3组件中getCurrentInstance()获取App实例,但是返回nu... 目录vue3组件中getCurrentInstajavascriptnce()获取App实例,但是返回n

基于Java实现回调监听工具类

《基于Java实现回调监听工具类》这篇文章主要为大家详细介绍了如何基于Java实现一个回调监听工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录监听接口类 Listenable实际用法打印结果首先,会用到 函数式接口 Consumer, 通过这个可以解耦回调方法,下面先写一个

使用Java将DOCX文档解析为Markdown文档的代码实现

《使用Java将DOCX文档解析为Markdown文档的代码实现》在现代文档处理中,Markdown(MD)因其简洁的语法和良好的可读性,逐渐成为开发者、技术写作者和内容创作者的首选格式,然而,许多文... 目录引言1. 工具和库介绍2. 安装依赖库3. 使用Apache POI解析DOCX文档4. 将解析

Java字符串处理全解析(String、StringBuilder与StringBuffer)

《Java字符串处理全解析(String、StringBuilder与StringBuffer)》:本文主要介绍Java字符串处理全解析(String、StringBuilder与StringBu... 目录Java字符串处理全解析:String、StringBuilder与StringBuffer一、St

springboot整合阿里云百炼DeepSeek实现sse流式打印的操作方法

《springboot整合阿里云百炼DeepSeek实现sse流式打印的操作方法》:本文主要介绍springboot整合阿里云百炼DeepSeek实现sse流式打印,本文给大家介绍的非常详细,对大... 目录1.开通阿里云百炼,获取到key2.新建SpringBoot项目3.工具类4.启动类5.测试类6.测

Spring Boot循环依赖原理、解决方案与最佳实践(全解析)

《SpringBoot循环依赖原理、解决方案与最佳实践(全解析)》循环依赖指两个或多个Bean相互直接或间接引用,形成闭环依赖关系,:本文主要介绍SpringBoot循环依赖原理、解决方案与最... 目录一、循环依赖的本质与危害1.1 什么是循环依赖?1.2 核心危害二、Spring的三级缓存机制2.1 三