# dictionary.js **Repository Path**: baojuhua/dictionary.js ## Basic Information - **Project Name**: dictionary.js - **Description**: dictionary.js 一个简单字典类库,你完全可以修改源码增加个性化功能 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-10-18 - **Last Updated**: 2023-10-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # dictionary.js **dictionary.js** 一个简单的字典类库,你完全可以修改源码增加个性化功能。 ## 诞生 在早前编写过 [enumify](https://gitee.com/baojuhua/enumify.js) 枚举类库,在日常编码过程中,在键值对对象中,很多情况下的值并不是单纯的数字或字符串,往往很多情况下属于对象,为此在 [enumify](https://gitee.com/baojuhua/enumify.js) 使用习惯的基础下,编写针对字典数据对象的功能封装库。 ## 安装 将本库复制到对应项目中,通过 `import` 导入 ## 使用 ### 创建枚举对象 通过 `new Dictionary` 或 `Dictionary.init` 方式创建枚举对象 参数: - `obj` ``: 传入对象或数组 - `opt` ``: 自定义配置 - - `opt.index`: 自定义索引字段 返回值: - `` 示例: ```js const options = [ { id: 'id_1', value: 'vOption1', label: '选项1', }, { id: 'id_2', value: 'vOption2', label: '选项2', }, { id: 'id_3', value: 'vOption3', label: '选项3', }, { id: 'id_4', value: 'vOption4', label: '选项4', }, { id: 'id_5', value: 'vOption5', label: '选项5', }, ] // 不指定索引在数组值中默认使用原始索引 new Dictionary(options) // 指定索引字段 new Dictionary(options, 'id') ``` ### 对象函数 - [keys](#keys) - [values](#values) - [getRaw](#getRaw) - [toOptions](#toOptions) - [toArray](#toArray) - [toDict](#toDict) - [toMap](#toMap) - [map](#map) - [clone](#clone) #### keys() 获取原始对象(original)下所有 key 返回值: - `` #### values() 获取原始对象(original)下所有 value 返回值: - `` #### getRaw() 返回原始传入对象 返回值: - `` #### toOptions([t,v]) 转选项,例如 `[{label:'否',value:0},{label:'是',value:1}]`格式 参数: - `opt` `` 自定义 label,value 字段输出配置 - `opt.label` `` (自定义 label 字段) - `opt.value` `` (自定义 value 字段) 返回值: - `` #### clone() 克隆对象 返回值: - `` ### 静态函数 - [reverse](#reverse) - [init](#init) #### reverse 反转对象 参数: - `obj` `` (参考对象) 返回值: - `` #### init 通过对象初始化对象 参数: - `obj` ``: 传入对象或数组 - `opt` ``: 自定义配置 - - `opt.index`: 自定义索引字段 返回值: - `` ### 更多示例 ```js const options = [ { id: 'id_1', value: 'vOption1', label: '选项1', }, { id: 'id_2', value: 'vOption2', label: '选项2', }, { id: 'id_3', value: 'vOption3', label: '选项3', } ] < new Dictionary({a:1,b:2,c:3}) > { "a": 1, "b": 2, "c": 3 } < new Dictionary({a:{id:11,val:111},b:{id:22,val:222},c:{id:33,val:333},},'val') > { "111": { "id": 11, "val": 111 }, "222": { "id": 22, "val": 222 }, "333": { "id": 33, "val": 333 } } < new Dictionary(options) > { "0": { "id": "id_1", "value": "vOption1", "label": "选项1" }, "1": { "id": "id_2", "value": "vOption2", "label": "选项2" }, "2": { "id": "id_3", "value": "vOption3", "label": "选项3" } } < new Dictionary(options, 'value') > { "vOption1": { "id": "id_1", "value": "vOption1", "label": "选项1" }, "vOption2": { "id": "id_2", "value": "vOption2", "label": "选项2" }, "vOption3": { "id": "id_3", "value": "vOption3", "label": "选项3" } } < new Dictionary(options, 'label') > { "选项1": { "id": "id_1", "value": "vOption1", "label": "选项1" }, "选项2": { "id": "id_2", "value": "vOption2", "label": "选项2" }, "选项3": { "id": "id_3", "value": "vOption3", "label": "选项3" } } < demoDict=new Dictionary(options, 'id') > { "id_1": { "id": "id_1", "value": "vOption1", "label": "选项1" }, "id_2": { "id": "id_2", "value": "vOption2", "label": "选项2" }, "id_3": { "id": "id_3", "value": "vOption3", "label": "选项3" } } < demoDict.getRaw() > [ { "id": "id_1", "value": "vOption1", "label": "选项1" }, { "id": "id_2", "value": "vOption2", "label": "选项2" }, { "id": "id_3", "value": "vOption3", "label": "选项3" } ] < demoDict.keys() > [ "id_1", "id_2", "id_3" ] < demoDict.values() > [ { "id": "id_1", "value": "vOption1", "label": "选项1" }, { "id": "id_2", "value": "vOption2", "label": "选项2" }, { "id": "id_3", "value": "vOption3", "label": "选项3" } ] < demoDict.toArray() > [ { "id": "id_1", "value": "vOption1", "label": "选项1" }, { "id": "id_2", "value": "vOption2", "label": "选项2" }, { "id": "id_3", "value": "vOption3", "label": "选项3" } ] < demoDict.clone() > { "id_1": { "id": "id_1", "value": "vOption1", "label": "选项1" }, "id_2": { "id": "id_2", "value": "vOption2", "label": "选项2" }, "id_3": { "id": "id_3", "value": "vOption3", "label": "选项3" } } < demoDict.toOptions() > [ { "label": "选项1", "value": "vOption1" }, { "label": "选项2", "value": "vOption2" }, { "label": "选项3", "value": "vOption3" } ] < demoDict.toOptions({label: 'label', value: 'id'}) > [ { "label": "选项1", "value": "id_1" }, { "label": "选项2", "value": "id_2" }, { "label": "选项3", "value": "id_3" } ] < demoDict.toOptions({label: 'label', value: v=>v.id}) > [ { "label": "选项1", "value": "id_1" }, { "label": "选项2", "value": "id_2" }, { "label": "选项3", "value": "id_3" } ] < demoDict.toOptions({value: null, key:v=>v.id}) > [ { "label": "选项1", "key": "id_1" }, { "label": "选项2", "key": "id_2" }, { "label": "选项3", "key": "id_3" } ] < demoDict.toOptions({label: null,value: null, key:'id',val:'value'}) > [ { "key": "id_1", "val": "vOption1" }, { "key": "id_2", "val": "vOption2" }, { "key": "id_3", "val": "vOption3" } ] < demoDict.toDict() > { "id_1": { "id": "id_1", "value": "vOption1", "label": "选项1" }, "id_2": { "id": "id_2", "value": "vOption2", "label": "选项2" }, "id_3": { "id": "id_3", "value": "vOption3", "label": "选项3" } } < demoDict.toDict({key:v=>v.id,value:v=>v.value}) > { "id_1": "vOption1", "id_2": "vOption2", "id_3": "vOption3" } < demoDict.toDict({key:v=>v.label}) > { "选项1": { "id": "id_1", "value": "vOption1", "label": "选项1" }, "选项2": { "id": "id_2", "value": "vOption2", "label": "选项2" }, "选项3": { "id": "id_3", "value": "vOption3", "label": "选项3" } } < demoDict.toDict({key:v=>v.label,value:v=>v.value}) > { "选项1": "vOption1", "选项2": "vOption2", "选项3": "vOption3" } < demoDict.toDict({ create:e => new Map(e)}) > Map(3) {'id_1' => {…}, 'id_2' => {…}, 'id_3' => {…}} < demoDict.toDict({key:v=>v.label,value:v=>v.value,create:(v)=>new Enumify(Object.fromEntries(v),Enumify.ENUM_STRING_VALUE_OPTS)}) > Enumify {original: {…}, 选项1: {…}, 选项2: {…}, 选项3: {…}, initConf: {…}} < demoDict.toMap({key:v=>v.label,value:v=>v.value}) > Map(3) {'选项1' => 'vOption1', '选项2' => 'vOption2', '选项3' => 'vOption3'} < demoDict.toMap({key:v=>v.label,value:v=>v.value,create:e => new Map(e)}) > Map(3) {'选项1' => 'vOption1', '选项2' => 'vOption2', '选项3' => 'vOption3'} ```