数组与对象的相互转换
【写在前面】:为什么突然想写这个呢?我习惯了自己在前端写枚举,例:enum Board {'BATCH'='批量','BATCH_OUTER'='批量-外部'}这样自己去调用的时候比较方便定义ts的时候也简单(用keyof typeof Board就可以了)。
但是往往在实际应用中,后对会返回枚举的数据过来的,我们尽量的是要去操纵数据,而不是自己写枚举数据
1、数组转对象
let arr=[{name:批量,value:'BATCH'},{name:'批量-外部',value:'BATCH_OUTER'}]
转化为
let obj = {'BATCH':'批量','BATCH_OUTER':'批量-外部'}
方案一
思路:
- 使用数组的reduce方法遍历数组
- 定义一个空对象
- 将遍历得到的每一个对象中的value值当做新对象的key,label的值当做新对象的值
- 循环结束后将obj的值返回给调用者即可
let arr=[{name:批量,value:'BATCH'},{name:'批量-外部',value:'BATCH_OUTER'}]
function arrToObj=(arr)=>{
return arr.reduce((obj,item)=>{
obj[item.value]=item.name
return obj
},{})
}
const obj = arrToObj(arr)
方案二
思路
- 使用数组的forEach方法遍历数组
- 定义一个空对象
- 将遍历得到的每一个对象中的value值当做新对象的key,label的值当做新对象的值
- 循环结束后将obj的值返回给调用者即可
let arr=[{name:批量,value:'BATCH'},{name:'批量-外部',value:'BATCH_OUTER'}]
function arrToObj=(arr)=>{
let obj = {}
arr.forEach((item)=>{
obj[item.value]=item.name
})
}
const obj = arrToObj(arr)