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

相关文章

SpringBoot集成XXL-JOB实现任务管理全流程

《SpringBoot集成XXL-JOB实现任务管理全流程》XXL-JOB是一款轻量级分布式任务调度平台,功能丰富、界面简洁、易于扩展,本文介绍如何通过SpringBoot项目,使用RestTempl... 目录一、前言二、项目结构简述三、Maven 依赖四、Controller 代码详解五、Service

Java中HashMap的用法详细介绍

《Java中HashMap的用法详细介绍》JavaHashMap是一种高效的数据结构,用于存储键值对,它是基于哈希表实现的,提供快速的插入、删除和查找操作,:本文主要介绍Java中HashMap... 目录一.HashMap1.基本概念2.底层数据结构:3.HashCode和equals方法为什么重写Has

Java 正则表达式的使用实战案例

《Java正则表达式的使用实战案例》本文详细介绍了Java正则表达式的使用方法,涵盖语法细节、核心类方法、高级特性及实战案例,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录一、正则表达式语法详解1. 基础字符匹配2. 字符类([]定义)3. 量词(控制匹配次数)4. 边

Java Scanner类解析与实战教程

《JavaScanner类解析与实战教程》JavaScanner类(java.util包)是文本输入解析工具,支持基本类型和字符串读取,基于Readable接口与正则分隔符实现,适用于控制台、文件输... 目录一、核心设计与工作原理1.底层依赖2.解析机制A.核心逻辑基于分隔符(delimiter)和模式匹

Java中的stream流分组示例详解

《Java中的stream流分组示例详解》Java8StreamAPI以函数式风格处理集合数据,支持分组、统计等操作,可按单/多字段分组,使用String、Map.Entry或Java16record... 目录什么是stream流1、根据某个字段分组2、按多个字段分组(组合分组)1、方法一:使用 Stri

Java+AI驱动实现PDF文件数据提取与解析

《Java+AI驱动实现PDF文件数据提取与解析》本文将和大家分享一套基于AI的体检报告智能评估方案,详细介绍从PDF上传、内容提取到AI分析、数据存储的全流程自动化实现方法,感兴趣的可以了解下... 目录一、核心流程:从上传到评估的完整链路二、第一步:解析 PDF,提取体检报告内容1. 引入依赖2. 封装

使用Spring Cache本地缓存示例代码

《使用SpringCache本地缓存示例代码》缓存是提高应用程序性能的重要手段,通过将频繁访问的数据存储在内存中,可以减少数据库访问次数,从而加速数据读取,:本文主要介绍使用SpringCac... 目录一、Spring Cache简介核心特点:二、基础配置1. 添加依赖2. 启用缓存3. 缓存配置方案方案

Java实现复杂查询优化的7个技巧小结

《Java实现复杂查询优化的7个技巧小结》在Java项目中,复杂查询是开发者面临的“硬骨头”,本文将通过7个实战技巧,结合代码示例和性能对比,手把手教你如何让复杂查询变得优雅,大家可以根据需求进行选择... 目录一、复杂查询的痛点:为何你的代码“又臭又长”1.1冗余变量与中间状态1.2重复查询与性能陷阱1.

深度剖析SpringBoot日志性能提升的原因与解决

《深度剖析SpringBoot日志性能提升的原因与解决》日志记录本该是辅助工具,却为何成了性能瓶颈,SpringBoot如何用代码彻底破解日志导致的高延迟问题,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言第一章:日志性能陷阱的底层原理1.1 日志级别的“双刃剑”效应1.2 同步日志的“吞吐量杀手”

Spring创建Bean的八种主要方式详解

《Spring创建Bean的八种主要方式详解》Spring(尤其是SpringBoot)提供了多种方式来让容器创建和管理Bean,@Component、@Configuration+@Bean、@En... 目录引言一、Spring 创建 Bean 的 8 种主要方式1. @Component 及其衍生注解