由于需求的易变性,我们会把一些状态或选项存储到数据库中。其中,中文与数字值的对应便形成了数据字典。
获取数据字典列表的方法:
//获取数据字典,参数为数据字典名,如:medicineType function getDataDictionary(groupCode,success){ $.ajaxDirect("/queryAllByCode?groupCode="+groupCode, 'GET', {}, function (data) { if(data.code===200){ data = data.data success(data) } }, function () { $.toast("获取数据字典失败", "text") } ) }
进入页面,获取数据字典存到前端缓存中。
var DIC_DATA = { medicineType:{}, garage:{} }
getDicData() function getDicData() { //药品种类 getDataDictionary("medicineType",function(data){ for(var i = 0;i<data.length;i++){ DIC_DATA.medicineType[data[i].itemCode] = data[i].itemName; } sessionStorage.DIC_DATA = pack(DIC_DATA); }) //送货车场 getDataDictionary("garage",function(data){ for(var i = 0;i<data.length;i++){ DIC_DATA.garage[data[i].itemCode] = data[i].itemName; } sessionStorage.DIC_DATA = pack(DIC_DATA); }) }
数据字典中key和value的双向转换代码如下:
//数据字典label与value双向转换(支持逗号分隔的字符串作为入参) function getValueByLabel(groupCode,name) { var dicData = unpack(sessionStorage.DIC_DATA); if(name){ name = name.toString().split(",") var str = ""; for(var i = 0;i < name.length;i++){ var object = dicData[groupCode]; var key = name[i]; if(findKey(object,name[i])){ str +=findKey(object,name[i]) + ","; } else{ str +=object[key] + ","; } } return str.substring(0,str.lastIndexOf(",")); } }
其中,findKey函数代码如下:
//返回value值对应的key let findKey = (obj,value, compare = (a, b) => a === b) =>{ return Object.keys(obj).find(k => compare(obj[k], value)) }
这是ES6+的语法,要点如下:
1.函数传入三个参数,obj、value和compare,compare是一个函数,返回a===b的值。
2.Object.keys(obj)是获取对象的所有key值,find函数即是在所有key值中找到其对应的value值等于value的数据,如有,则返回此key,若无,则返回false。