数据字典的转换

由于需求的易变性,我们会把一些状态或选项存储到数据库中。其中,中文与数字值的对应便形成了数据字典。

获取数据字典列表的方法:

//获取数据字典,参数为数据字典名,如: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。

posted @ 2020-01-21 09:27  罗毅豪  阅读(1701)  评论(0编辑  收藏  举报