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健康检查监控全过程

《springboot健康检查监控全过程》文章介绍了SpringBoot如何使用Actuator和Micrometer进行健康检查和监控,通过配置和自定义健康指示器,开发者可以实时监控应用组件的状态,... 目录1. 引言重要性2. 配置Spring Boot ActuatorSpring Boot Act

使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)

《使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)》在现代软件开发中,处理JSON数据是一项非常常见的任务,无论是从API接口获取数据,还是将数据存储为JSON格式,解析... 目录1. 背景介绍1.1 jsON简介1.2 实际案例2. 准备工作2.1 环境搭建2.1.1 添加

Java实现任务管理器性能网络监控数据的方法详解

《Java实现任务管理器性能网络监控数据的方法详解》在现代操作系统中,任务管理器是一个非常重要的工具,用于监控和管理计算机的运行状态,包括CPU使用率、内存占用等,对于开发者和系统管理员来说,了解这些... 目录引言一、背景知识二、准备工作1. Maven依赖2. Gradle依赖三、代码实现四、代码详解五

java如何分布式锁实现和选型

《java如何分布式锁实现和选型》文章介绍了分布式锁的重要性以及在分布式系统中常见的问题和需求,它详细阐述了如何使用分布式锁来确保数据的一致性和系统的高可用性,文章还提供了基于数据库、Redis和Zo... 目录引言:分布式锁的重要性与分布式系统中的常见问题和需求分布式锁的重要性分布式系统中常见的问题和需求

SpringBoot基于MyBatis-Plus实现Lambda Query查询的示例代码

《SpringBoot基于MyBatis-Plus实现LambdaQuery查询的示例代码》MyBatis-Plus是MyBatis的增强工具,简化了数据库操作,并提高了开发效率,它提供了多种查询方... 目录引言基础环境配置依赖配置(Maven)application.yml 配置表结构设计demo_st

在Ubuntu上部署SpringBoot应用的操作步骤

《在Ubuntu上部署SpringBoot应用的操作步骤》随着云计算和容器化技术的普及,Linux服务器已成为部署Web应用程序的主流平台之一,Java作为一种跨平台的编程语言,具有广泛的应用场景,本... 目录一、部署准备二、安装 Java 环境1. 安装 JDK2. 验证 Java 安装三、安装 mys

Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单

《Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单》:本文主要介绍Springboot的ThreadPoolTaskScheduler线... 目录ThreadPoolTaskScheduler线程池实现15分钟不操作自动取消订单概要1,创建订单后

JAVA中整型数组、字符串数组、整型数和字符串 的创建与转换的方法

《JAVA中整型数组、字符串数组、整型数和字符串的创建与转换的方法》本文介绍了Java中字符串、字符数组和整型数组的创建方法,以及它们之间的转换方法,还详细讲解了字符串中的一些常用方法,如index... 目录一、字符串、字符数组和整型数组的创建1、字符串的创建方法1.1 通过引用字符数组来创建字符串1.2

SpringCloud集成AlloyDB的示例代码

《SpringCloud集成AlloyDB的示例代码》AlloyDB是GoogleCloud提供的一种高度可扩展、强性能的关系型数据库服务,它兼容PostgreSQL,并提供了更快的查询性能... 目录1.AlloyDBjavascript是什么?AlloyDB 的工作原理2.搭建测试环境3.代码工程1.

Java调用Python代码的几种方法小结

《Java调用Python代码的几种方法小结》Python语言有丰富的系统管理、数据处理、统计类软件包,因此从java应用中调用Python代码的需求很常见、实用,本文介绍几种方法从java调用Pyt... 目录引言Java core使用ProcessBuilder使用Java脚本引擎总结引言python