兼容后台数据字段变化前端做对应处理 更换JS对象索引KEY值 添加映射字段

发表于 2020-11-20 11:27:19   |   下载附件   |   字体:
前端数据兼容处理更换JS对象索引KEY值添加映射字段后台数据字段变换兼容后台数据字段变化
// 数据类型深度检查
var typefor = function(obj, type) {
    var oType = {
        '[object Boolean]': 'Boolean',
        '[object Number]': 'Number',
        '[object String]': 'String',
        '[object Function]': 'Function',
        '[object Array]': 'Array',
        '[object Date]': 'Date',
        '[object RegExp]': 'RegExp',
        '[object Object]': 'Object'
    },
    ret = obj == null ? String(obj) : oType[Object.prototype.toString.call(obj)] || 'Unknown';
    return type ? type.test(ret) : ret;
};

// 数据兼容处理 更换JS对象索引KEY值 添加映射字段
function preDataProcessor(res){
    // 添加映射字段 预处理后台数据兼容前端运行代码
    // 映射对象
    var transformObjConfig = {
        "Live_control": {
            "c": "resultcode",              // 原来的字段 resultcode,新字段 c
            "m": "msg",                     // 原来的字段 msg,新字段 m
            "d": {
                "s": "status",              // 可以观看直播状态
                "t": "status_text",         // 直播状态文字 直播中
                "c": "t_class",             // 前端状态文案的样式,值:t-playing  t_wait 
                "d": "curr_date",           // 是否是当天,1是,0不是,只有当天将要开播的直播间才显示倒计时
                "m": "dec_time",            // 当前时间距直播开始时间的差,单位秒
                "p": "play_url",            // 直播视频播放链接
                "f": "flv_url",             // 直播视频播放链接(flv协议)
                "a": "audio_url",           // 直播音频播放链接
                "af": "audio_url_flv",      // audio_url_flv直播音频播放链接
                "w": "switch",              // 是否可以切换硬盘,1是,0反之。
                "o": "options"              // 点播回放防盗链参数以及点播ID,可回放时返回字段
            },
            "a":"Live_control"              // action操作类型
        }
    }, transformObj = null;
    // 映射赋值
    function resetKey(data,config){
        console.info('resetKey--->',data,config)
        for(var k in config){
            if(k != 'ownerProperty' && data.hasOwnProperty(k) && config.hasOwnProperty(k) ){
                if(!typefor(config[k], /Object/)){
                    data[config[k]] = data[k];
                }else{
                    data[config[k]['ownerProperty']] = resetKey(data[k],config[k]);
                }
            }
            
        }
        return data;
    }
    // 找配置对象
    for(var k in transformObjConfig){
        if(res.hasOwnProperty('a') && res['a'] === k ){
            // 处理对应数据
            transformObj = transformObjConfig[k];
            for(var i in transformObj){
                if(res.hasOwnProperty(i) && transformObj.hasOwnProperty(i) ){
                    if(typefor(transformObj[i], /Object/)){
                        res[transformObj[i]['ownerProperty']] = resetKey(res[i],transformObj[i]);
                    }else{
                        res[transformObj[i]] = res[i];
                    }   
                }
            }
        }
    }
    return res;
},

// 测试
var abc = preDataProcessor({
	a: 'Live_login',
	c: 0,
	m: '测试',
	d: {
		i: 22,
		j:[111,222,555],
		s: {
			a : 555
		}
	}
})
console.info(abc)