持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第9天,点击查看活动详情
你是否遇到这种情况?,当我从浏览器端拿到的数据如下图一样,是一个数组包对象的数据,但是我要想把拿到的数据给我的后端兄弟,需要把中文的键转化成英文的键,走出办公室,拿起一根香烟,冷静的想了一想,再我的不断尝试中,终于实现了,对象键的中英文转化(٩(๑>◡<๑)۶)
需求: 中文键-->英文键
已知的条件是
// 已知数据[{姓名:xxx,手机号:1222}]
// 后端需要:[{name:xxx,mobile:1222}]
首先需求如下:
需求: 中文键--->英文键
思路:要实现键的互转,我们要找到他们互转的关键点,要明白我们要干什么,很明显我们这里是要把中文的键转化成英文的,所以我们要准备一组对应关系的数据,便于我们转化
对应关系的数据如下
const templateData = {
'入职日期': 'timeOfEntry',
'姓名': 'username',
'工号': 'workNumber',
'手机号': 'mobile',
'转正日期': 'correctionTime'
}
核心代码如下
const newArr = []
results.forEach(item => {
const obj = {}
// 循环数组的每一项(对象)
for (const k in item) {
// k就是item的键就是中文键,通过上面的模板数据可以获取到英文的键
const newKey = templateData[k]
// 判断新键是否包含日期类型的键,如果是需要转化格式后再赋值
if (['timeOfEntry','correctionTime'].includes(newKey)){
obj[newKey] = this.formatExcelDate(item[k])
return
}
// 给对象添加属性和值
obj[newKey] = item[k]
}
newArr.push(obj)
})
我这里的是用在表格的导入的,所以results是我的文件上传成功的函数的参数,如果你的业务代码中不需要做格式的处理,就并不需要加上面的if判断
需求: 英文键--->中文键
已知数据:[{name:xxx,mobile:1222}]
导出数据:[[xxx],[1222]]
话不多说反手就是一个对应关系的数据
思路:这里和上面的中文转英文键有一点不同的是这是转化的是一个二维数组,所以我们在书写逻辑的时候要声明两个数组,一个大数组(外层的),一个小数组(里面的)
核心代码
const headersArr = ['姓名', '手机号', '入职日期', '聘用形式', '转正日期', '工号', '部门']
// 获取表格所有数据
const { data: { rows }} = await reqGetEmployeeList(1, this.total)
// 数据格式转换
const newArr = []
rows.forEach(item => {
const arr = []
//根据表头在对应关系数据中找到对应的英文键
headersArr.forEach(value => {
const newKey = headersRelations[value]
// 判断新键是否是聘用形式对应的数据,是就转化一下格式
if (newKey === 'formOfEmployment') {
const obj = employeesEnum.hireType.find(el=> el.id === item[newKey])
const res = obj ? obj.value : '未知'
arr.push(res)
return
}
//找到了就添加到里层的数组中
arr.push(item[newKey])
})
newArr.push(arr)
})
这里和上面的转化类似,都是利用对应关系偷偷的在添加数据的时候做了转化,当然你的业务不需要做格式转化的话,if中的代码是可以省略的