前端批量数据映射方法
1.目的
实现数据的映射,例如:后端返回的数据为1,根据1映射对应的信息
(针对需要大量数据进行映射而封装的方法,如只有少数需要映射在获取后端数据进行简单映射即可)
2.实现
2.1映射数据结构
data:{
applyNum: "CN201810954152.3"
auditStatus: "1"
techState:'1’
}
2.2编写映射规则
const DATA_MAP = { techState: [ { label: '实验室', value: '1' }, { label: '小试', value: '2' }, { label: '中试', value: '3' }, { label: '产业化', value: '4' }, { label: '其他', value: '5' } ] }
2.2对映射规则进行key和Value的互换,方法如下
const v2Label = key2Value(DATA_MAP) // 映射表数据处理
function key2Value(originMap) { //映射规则空则返回 if (!originMap) return const result = {} //获取映射规则的每一个key遍历 Object.keys(originMap).forEach(key => { //获取每一项规则 const item = originMap[key] //对每一项规则内的label和value进行互换 result[key] = item.reduce((pre, cur) => { const { label, value } = cur pre[value] = label return pre }, {}) }) // 原{techState:[{label: '实验室',value:'1'}] // 现{techState:[{'1' : '实验室'}]} return result }
2.3调用方法对映射数据进行映射
// 处理数据中存在需要转换的值 handlerResultMappings(result) { const v = result || [] mappingsTools.dealResult2Map(v, v2Label) },
2.4映射数据方法
// 根据key替换value function dealResult2Map(resultList, dataMap) { resultList.forEach(item => { Object.keys(item).forEach(resultKey => { //获取映射前的值如:1 const v = item[resultKey] //判断resultKey属性存在dataMap中,有则进行映射 if (Object.hasOwnProperty.call(dataMap, resultKey)) { //对映射的属性增加一个对应的属性名+Str来存储映射后的值 //如techState:1 => techStateStr:实验室 const k = `${resultKey}Str` //techStateStr = techState[1] //实验室 item[k] = dataMap[resultKey][v] } }) }) }