// 数据类型深度检查
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)