zoukankan      html  css  js  c++  java
  • 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)
    
  • 相关阅读:
    《Three.js 入门指南》3.1.1
    《Three.js 入门指南》3.1.1
    《Three.js 入门指南》3.1.1
    《Three.js 入门指南》3.1.1
    《Three.js 入门指南》3.1.1
    《Three.js 入门指南》3.0
    《Three.js 入门指南》2.4.1- 照相机
    《Three.js 入门指南》2.3.1- 照相机
    《Three.js 入门指南》2- 照相机
    《Three.js 入门指南》1.3
  • 原文地址:https://www.cnblogs.com/sanhuamao/p/14429438.html
Copyright © 2011-2022 走看看