如何将类名返回与switch匹配方法合并为单对象返回方法?
完全可以整合,整合后的实现比原来两个独立方法的维护成本更低,逻辑更统一,还能避免两边枚举值不一致的问题。
基础整合方案
你可以直接用一个方法返回类名和描述的映射对象,使用时通过JS对象的内置方法就能满足原来的两个需求:
function getCookieClassMap() { return { 'optanon-category-C0001': '严格必要Cookie', 'optanon-category-C0002': '性能Cookie', 'optanon-category-C0003': '功能Cookie', 'optanon-category-C0004': '定向Cookie', 'optanon-category-C0005': '社交媒体Cookie' }; }
基础方案使用方式
- 替代原
class_names()方法获取所有类名数组:调用Object.keys(getCookieClassMap())即可 - 替代原
classname_output()方法获取分类描述:访问getCookieClassMap()[传入的类名] ?? '没有匹配指定类的Cookie'即可
进阶封装方案
如果想要把默认值判断逻辑也内置,不需要每次使用时单独处理,可以封装成更易用的工具对象:
const CookieClassUtil = { classMap: { 'optanon-category-C0001': '严格必要Cookie', 'optanon-category-C0002': '性能Cookie', 'optanon-category-C0003': '功能Cookie', 'optanon-category-C0004': '定向Cookie', 'optanon-category-C0005': '社交媒体Cookie' }, // 获取所有类名数组 getAllClassNames() { return Object.keys(this.classMap); }, // 获取指定类名的分类描述 getDescription(className) { return this.classMap[className] ?? '没有匹配指定类的Cookie'; } };
封装后使用示例
// 获取所有类名数组 const allClassNames = CookieClassUtil.getAllClassNames(); // 获取指定类名的描述 const targetDesc = CookieClassUtil.getDescription('optanon-category-C0001');
方案优势
- 维护成本低:后续新增、修改、删除Cookie分类只需要调整
classMap中的键值对即可,不需要同时修改两个方法的逻辑,完全避免两边枚举值不一致的问题 - 访问效率高:对象键值访问的时间复杂度为O(1),比原switch分支判断的效率更高,分类数量越多优势越明显
- 代码更精简:去掉了冗余的重复枚举逻辑,可读性更高
内容的提问来源于stack exchange,提问作者user16645285
相关产品推荐
相关产品推荐

