前端怎么定义字典更好呢

2024-07-01 10:31:33 +08:00
 shilianmlxg

我需要一个字典,要有一下三点,并且后期可以扩展字段
key 键名称(下面的 OR,PACU)
value 值(下面的 1,2)
label 值
color 值(可选)

现在定义的两个 一个 enum 一个 map 。觉得有点多余,

问下最优解是什么,

我希望通过访问字段的方式就能知道该字典所对应的值,比如 ROOM_TYPE_ENUM.OR

export const enum ROOM_TYPE_ENUM {

OR = 1, // 手术间

PACU = 2 // 复苏室

}



export const ROOM_TYPE_MAP = [

{

label: '手术间',

value: 1

},

{

label: '复苏室',

value: 2

},

]

3739 次点击
所在节点    程序员
29 条回复
Moonless
2024-07-01 10:41:25 +08:00
w568w
2024-07-01 10:43:10 +08:00
@Moonless

@Livid AI 回复
han3sui
2024-07-01 10:50:33 +08:00
楼上这个有点过了吧,AI 回答感觉没什么问题啊,给出了明确的方案和解释,又不是瞎编的
han3sui
2024-07-01 10:51:44 +08:00
而且人家还特地贴了图进来,都不是直接复制粘贴
superedlimited
2024-07-01 11:03:50 +08:00
@han3sui 网警是这样的。
duzhuo
2024-07-01 11:04:22 +08:00
@han3sui 贴图才是最不好的,想测试都麻烦
ZZITE
2024-07-01 11:06:23 +08:00
```
const ROOM_TYPE_KEYS = ["OR", "PACU"] as const;

type RoomTypeMap = {
[key in (typeof ROOM_TYPE_KEYS)[number]]: {
label: string;
value: number;
color?: string;
};
};

export const ROOM_TYPE_MAP: RoomTypeMap = {
OR: {
label: "手术间",
value: 1,
},
PACU: {
label: "复苏室",
value: 2,
},
};
```

我一般会这么写
SimonOne
2024-07-01 11:23:04 +08:00
@han3sui #3 因为站长不让贴 AI 回复,这是个人站忘啦
accelerator1
2024-07-01 11:36:05 +08:00
站长的想法是不要让 AI 回复充斥网站,而不是禁止 AI 工具的使用。
楼主的问题的确可以 GPT 解决的,工具还是要学会使用的,我们公司招人,会不会 GPT 也是一项指标了。。。
meteor957
2024-07-01 11:59:46 +08:00
枚举不方便通过值去查询到对应的 key
Moonless
2024-07-01 13:25:00 +08:00
@w568w Sorry ,sorry ,觉着楼主的提问很合适直接对话,试了下结果又很合理,就贴了出来。AI 工具确实很方便😄,后续会留意。
@han3sui @accelerator1 哈哈,确实是看了答案的合理性
RogerL
2024-07-01 13:31:00 +08:00
我跟 1L 的做法差不多,但是我建议用数组,然后通过 reduce 转换成对象。
因为数组字典很多情况下你可能会做下拉展示,可能会对排序有需求
dfkjgklfdjg
2024-07-01 14:01:04 +08:00
@RogerL #12 ,我和你反过来,用对象然后用 `Object.values()` 转成数组去下拉展示。
connection
2024-07-01 14:22:23 +08:00
key string 用 object 定义
paopjian
2024-07-01 14:27:31 +08:00
学了八股文才知道不要乱用 Object 作为数组,不然容易飞出去找原型链,还是 map 安全点
deepshe
2024-07-01 15:49:44 +08:00
我也是用枚举类去转成数组, 判断下是不是数字类型,
Object.entries(enumObj).map(([key, value]) => {
if (isNaN(Number(key))) {
arr.push({ label: key, value });
}
});
xocus
2024-07-01 17:07:32 +08:00
写个 enum ,再写一个 dict 是好麻烦,但是我还是这样分开写 2 个,没找到好方法
4Et5ShxMIq58n6Lr
2024-07-01 17:43:47 +08:00
@w568w 有毛病啊,人家发个图也不行么
rain0002009
2024-07-01 17:53:18 +08:00
export enum ROOM_TYPE {
手术间 = 1,
复苏室,
}

直接中文又能用又直观
dingdangnao
2024-07-01 17:56:09 +08:00
@rain0002009 #19 魔鬼!!😂😂

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1053856

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX