代码优雅化进阶学习(三)

news2025/1/19 23:12:07

代码优雅化进阶学习(三)

文章目录

  • 代码优雅化进阶学习(三)
    • 需求详情
    • 难点
    • 最佳实现效果
    • 实现
      • 优点

需求详情

如下图:
实现类似结构,首先按照 status 状态的值,分为全部 已实现 和 未实现;再按照 categoryId 来展示各类别

在这里插入图片描述


难点

  1. 如何保证 status 的扩展性和可维护性
  2. 如何保证若新增分类,即新增 categoryId 的可维护性

最佳实现效果

  • 新增 categoryId ,不需要改内部逻辑代码,只需新增配置,就可以自动实现 新增分类的对应数据
  • 新增 status,不需要改内部逻辑代码,只需新增配置,就可以自动实现 新增状态的对应数据

实现

export enum IStatus {
    /**
     * 未实现
     */
    NotObtained = 0,
    /**
     * 已实现
     */
    Obtained = 1
}

interface ICategory{
    title: string;
    data: IListItemTpe[];
}

const CATEGORY_MAP: { [_: string]: string } = {
    1: "苹果",
    2: "香蕉"
};

export function formatData(list: IListItemTpe[] | null, status: IStatus | null): ICategory[] {
    const categoryMap: { [_: string]: IListItemTpe[] } = {};

    list?.filter((item) => item.status === status)
        .forEach((item) => {
            const { categoryId } = item;
            if (!categoryMap[categoryId!]) categoryMap[categoryId!] = [];
            categoryMap[categoryId!].push(item);
        });
    return Object.keys(categoryMap).map((key) => {
        return {
            title: CATEGORY_MAP[key],
            data: categoryMap[key]
        };
    });
}

优点

  • 用 map 取代了多个 if-else ,将所有 categoryId 作为 map 的key,value 值就是对应的 数据列表
  • 用 另一个map 来做 categoryId 和 title 的 一一对应,相当于是一个配置文件,当新增 categoryId 时,直接在 该 map 里面进行添加配置
  • 相当于使用了两个及多个 map 来避免多重 if else,并且满足了可维护性

前端小菜鸟持续学习中,欢迎指正!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/427825.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring Cloud之一:注册与发现-Eureka工程的创建

系列目录(持续更新。。。) Spring Cloud:什么是微服务 Spring Cloud之一:注册与发现-Eureka工程的创建 Spring Cloud之二:服务提供者注册到Eureka Server Spring Cloud之三:Eureka Server添加认证 Spr…

FPGA采集AD7606数据UDP网络传输 提供工程源码和技术支持 附带上位机接收软件

目录1、前言2、我这里已有的UDP方案3、AD7606采集详解4、UDP设计方案5、AD7606 UDP传输详细设计方案UDP应用的设计思路获取FPGA网卡信息获取数据UDP发送数据组包UDP发送流程6、vivado工程详解7、上板调试验证并演示8、福利:工程代码的获取1、前言 目前网上的fpga实…

如何将音频文件转换为MP3格式?

音频文件有很多种格式,如 WAV、FLAC、AAC 等,其中 MP3 是最为常见的一种格式,因为它具有压缩比高、音质损失少、兼容性强等优点,适合在各种设备上播放。如果你想将一个音频文件转换为 MP3 格式,可以采用以下几种方法&a…

实现mini智能助理—模型训练

背景 距离上篇打带你实现自己迷你chatgpt文章,到现在已经过去快两个月。自制mini chatgpt文章一直没有更新,原因有二:1.一直在找合适体量表现不错模型 2.公司内部太卷了,没太多时间好好梳理文章。这篇文章会给大家介绍一些大模型…

踩坑:IDEA中Junit、Test模块无法使用Scanner

今天在做作业,在一个测试功能需要输入数据,于是想起了Scanner,运行之后发现控制台无法输入。 然后打开我心爱的浏览器,开始搜索,网上很多关于“IDEA中Test模块无法使用Scanner”的解决方法,基本上都是修改I…

Pandas入门实践2 -数据处理

为了准备数据进行分析,我们需要执行数据处理。在本节中,我们将学习如何清理和重新格式化数据(例如,重命名列和修复数据类型不匹配)、对其进行重构/整形,以及对其进行丰富(例如,离散化…

rebar3安装-windows篇

rebar3是erlang的包管理工具,虽然不是官方出品,但它已经成为事实上的官方包管理工具了,github地址如下: https://github.com/erlang/rebar3 已经不难看出它的地位了。 rebar官网地址是http://rebar3.org/,上面有安装…

使用Socks5代理加强爬虫的网络安全

网络爬虫是获取互联网上数据的重要手段,但也会因为访问频率过高或其他不当行为,导致被网站封禁或IP被屏蔽。此时,使用代理服务器是解决这一问题的常用方法。本文介绍了Socks5代理的使用方式,以及如何将其应用到爬虫中,…

记录:解决with invalid types() or values()...问题【亲测有效】

👨‍🎓作者:bug菌✏️博客:CSDN、掘金、infoQ、51CTO等🎉简介:CSDN博客专家,C站历届博客之星Top50,掘金/InfoQ/51CTO等社区优质创作者,全网粉丝合计10w,对一切…

红黑树(C++实现)

文章目录红黑树的概念红黑树的性质红黑树结点的定义红黑树的插入红黑树的查找红黑树的验证检测是否满足二叉搜索树检测是否满足红黑树的性质红黑树与AVL树的比较包含上述功能的红黑树代码红黑树的概念 红黑树,是一棵二叉搜索树,但在每一个结点上增加一个存储位表示结点的颜色,可…

《Netty》从零开始学netty源码(三十五)之DefaultChannelPromise

DefaultChannelPromise 在分析Unsafe或者ChannelPipeline的方法时经常出现Promise类,它用来保存channel的状态值,默认使用的是DefaultChannelPromise,接下来分析这个类。 类结构图 属性值 DefaultChannelPromise中有一个属性result&#xf…

Python之测试框架搭建【一】(毛坯框架)

前言一、框架基础(从最小步骤入手_毛坯框架) 1)首先我们自己建立一个项目,这个项目里面有testcases文件夹,testdatas文件夹2)在testdatas里面放测试数据3)建立一个main文件4)输出测试…

ASP.NET 记录 HttpRequest HttpResponse HttpServerUtility

纯属个人记录,会有错误 HttpRequest Browser是获取客户端浏览器的信息 Cookies是获取客户端的Cookies QueryString是获取客户端提交的数据 ServerVariables是获取服务器端或客户端的环境变量信息 Browser 语法格式: Request.Browser[“浏览器特性名”] 常见的特性名 名称说…

【grafana】使用多级变量解决Granfana模板变量中的大小限制

前言 最近对公司的Kafka 集群集成了 exporter prometheus granfana 服务,我们将 topic 变量抽象成模板变量,此时发现 granfana 变量有 10k 的个数限制。导致我们显示 topic 名称不全。 效果如下:全选后只有 10k 个变量。 解决 一番百度…

【Python】【进阶篇】二十二、Python爬虫的BS4解析库

目录二十二、Python爬虫的BS4解析库22.1 BS4下载安装22.2 BS4解析对象22.3 BS4常用语法1) Tag节点22.4 遍历节点22.5 find_all()与find()1) find_all()2) find()22.6 CSS选择器二十二、Python爬虫的BS4解析库 Beautiful Soup 简称 BS4(其中 4 表示版本号&#xff0…

C语言函数大全-- k 开头的函数

C语言函数大全 本篇介绍 C语言函数大全-- k 开头的函数 1. kcalloc 1.1 函数说明 函数声明函数功能void *kcalloc(size_t n, size_t size, gfp_t flags);它是 Linux 内核中的一个函数,用于在内核空间分配一块连续的指定大小的内存,它与标准库函数 ca…

RK3568平台开发系列讲解(设备驱动篇)内核空间与用户空间数据交互实验

🚀返回专栏总目录 文章目录 一、内核空间与用户空间二、用户空间和内核空间数据交换三、实验程序沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍对内核空间与用户空间的数据交换功能。 一、内核空间与用户空间 Linux 系统将可访问的内存空间分为了两个部…

指针的运算

在C语言中,指针是一个非常重要的概念。指针可以用来访问和修改内存中的数据,也可以用来进行指针的运算。在本篇博客中,我们将探讨指针的解引用、指针与整数的加减运算、同类型指针间的减法运算和指针的关系运算。 指针的解引用 在C语言中&a…

网络安全运维人员面临的痛点分析

1. 工作压力大:网络安全运维人员需要时刻关注系统的安全状况,发现并修复漏洞,保护系统免受攻击和数据泄露的风险。这需要他们不断学习新知识、掌握新技能,并且在短时间内快速响应和处理各种安全问题,这种高强度的工作压…

Arcgis小技巧【12】——ArcGIS标注的各种用法和示例

标注是将描述性文本放置在地图中的要素上或要素旁的过程。 本文整理了ArcGIS中的各种标注方法、可能遇到的问题和细节,内容比较杂,想到哪写到哪。 一、正常标注某一字段值的内容 右键点击【属性】,在【标注】选项卡下勾选【标注此图层中的的…