數據字典的轉換


由於需求的易變性,我們會把一些狀態或選項存儲到數據庫中。其中,中文與數字值的對應便形成了數據字典。

獲取數據字典列表的方法:

//獲取數據字典,參數為數據字典名,如: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。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM