示例
let time=["10:12:16", "15:36:51", "15:37:55", "15:36:05", "15:36:25", "15:37:11"]
let state=[3, 3, 4, 5, 1, 2]
//合成数组对象:
[
{
id:1,
time:"10:12:16",
state:3
},
{
id:2,
time:"15:36:51",
state:3
},
{
id:3,
time:"15:37:55",
state:4
},
...
]
前言
之前我采用的方法是往函数传入需要用到的数组,如下:
arrToObj(arr1,arr2,arr3,...)
但是当需要合成的对象有很多种时,这种方法就缺乏灵活性。因为我只能根据传过来的数组数量来判断类型,进而选择合成方式:
function arrToObj(...values){
if(values.length==1){}
if(values.length==2){}
}
//or
function arrToObj(){
if(arguments.length==1){}
}
后来我选择用了Map
结构。
开始合成
根据传过来的类型判断数据结构,接着处理数据:
// @param {string} type --数据类型
// @param {map} data --数据源
function transObj(type,data){
let list=[]
if(type=="type1"){
let time=data.get("time") //数据类型中对应的数据
let state=data.get("state") //数据类型中对应的数据
for(let i=0;i<time.length;i++){
list.push({id:i+1,time:time[i],state:state[i]})
}
}
if(type=="type2"){
...
}
return list
}
例子:
const map=new Map()
map.set("time",arr1)
.set("state",arr2)
arrToObj("type1",map)
之后只要有新的一组数组,我就可以在函数内加上一个if
语句,这样我就能针对每种类型进行对象合成了:
const map=new Map()
map.set("name",arr1)
.set("age",arr2)
.set("sex",arr2)
arrToObj("type2",map)