由於需求的易變性,我們會把一些狀態或選項存儲到數據庫中。其中,中文與數字值的對應便形成了數據字典。
獲取數據字典列表的方法:
//獲取數據字典,參數為數據字典名,如: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。
