js封装 |将多组数组按序转为数组对象

示例

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)
posted @ 2021-02-22 12:14  sanhuamao  阅读(344)  评论(0编辑  收藏  举报