js数据格式转换方法

数据格式转换方法

  1. 将数组转为tree树状结构
    //数据格式如下
    const data = [
      { id: '01', name: '张大大', pid: '', job: '项目经理' },
      { id: '02', name: '小亮', pid: '01', job: '产品leader' },
      { id: '03', name: '小美', pid: '01', job: 'UIleader' },
      { id: '04', name: '老马', pid: '01', job: '技术leader' },
      { id: '05', name: '老王', pid: '01', job: '测试leader' },
      { id: '06', name: '老李', pid: '01', job: '运维leader' },
      { id: '07', name: '小丽', pid: '02', job: '产品经理' },
      { id: '08', name: '大光', pid: '02', job: '产品经理' },
      { id: '09', name: '小高', pid: '03', job: 'UI设计师' },
      { id: '10', name: '小刘', pid: '04', job: '前端工程师' },
      { id: '11', name: '小华', pid: '04', job: '后端工程师' },
      { id: '12', name: '小李', pid: '04', job: '后端工程师' },
      { id: '13', name: '小赵', pid: '05', job: '测试工程师' },
      { id: '14', name: '小强', pid: '05', job: '测试工程师' },
      { id: '15', name: '小涛', pid: '06', job: '运维工程师' }
    ]
    
    //定义一个函数  设置两个形参 第一个参数为要转变为tree的数组
    //第二个参数为树根(最高的一级)
    //filter 筛选出最高的一级   map将此级展开到原地,并给此对象设置children属性,属性值就为下次执行的结果,下次执行时第二个参数为上一次对象的id,便可和pid对比找到分支
    function changeTree(list,pid=''){
    
     return list
       .filter((obj) => obj.pid === pid)
       .map((obj) => ({
        ...obj,
         children: changeTree(list, obj.id),
         
       }))
    }
    
    console.log(changeTree(data));
    
    //输出结果为:
     [{
            label: '张大大',
            children: [
              {
              	label: '小亮',
              	children: [{label: '小丽'},{label: '大光'}]
            	},
              {
              	label: '小美',
              	children: [{label: '小高'}]
            	},
              {
              	label: '老马',
              	children: [{label: '小刘'},{label: '小华'},{label: '小李'}]
            	},
              {
              	label: '老王',
              	children: [{label: '小赵'},{label: '小强'}]
            	},
              {
              	label: '老李',
              	children: [{label: '小涛'}]
            	}
          	]
     }]

     

  2. 将数组转为对象

    //数组如下:
    let arr = [{label:'男',value: 1}, {label:'女',value: 0}]
    
    let obj2 = {}
    function f(arr) {
        //循环数组  将对象中的值装进新的对象中 以键值对形式保存
      arr.forEach(obj=>{  
         obj2[obj.value] = obj.label
      })
      return obj2
    }
    console.log(f(arr))
    
    //打印结果
    // obj2 = {'0': '女', '1': '男'}

     

  3. 将数组对象中的值,取出来装进新的数组里使用

    //数组如下:
    let arr0 = [{label:'男',value: 1}, {label:'女',value: 0}]
     
    let arr2 = []
    function f2(arr) {
    //遍历数组  将每个对象中的值  追加到新的数组中去
      arr.forEach(obj=>{
          arr2.push(obj.label)
      })
      return arr2
    }
    
    console.log(f2(arr0))
    //打印结果
    // arr2 = ['男', '女']

     

  4. 遍历对象并将值存入数组

    //数组如下:
    var obj4 = {label:'男',value: 1,age: 18}
     
    let arr4 = []
    function f5(obj) {
      for(let key in obj){
        //这里要用obj[key] 不能用obj.key
          arr4.push(obj[key])
      }
      return arr4
    }
    
    console.log(f5(obj4))
    
    //打印结果
    // arr = ['男', '1', '18'] // 所有的属性值取出来,保存在数组中

     

  5. 将对象转为key=值&key=值格式

    //定义一个对象:
    let obj5 = { id: '01', name: '张大大', pid: '', job: '项目经理' }
    
    
    
    //方法一
    
    let str = '' //声明空字符串
    for (let key in obj5) {
      str += key + '=' + obj5[key] + '&'
    }
    //截取字符串 
    str = str.slice(0, str.length - 1)
    console.log(str)
    
    //打印结果:
    //  id=01&name=张大大&pid=&job=项目经理
    
    //方法二:
    let arr5 = []
    for (let key in obj5) {
      arr5.push(`${key}=${obj5[key]}`)
    }
    let str1 = arr5.join('&')
    console.log(str1)
    
    //打印结果:
    //  id=01&name=张大大&pid=&job=项目经理

     

  6. 将key=值&key=值格式转为对象

    let str = 'id=01&name=张大大&pid=&job=项目经理'
    
    let arr6 = str.split('&')  //分割字符串
    let obj6 = {}
    arr6.forEach(function(item) {
      item = item.split('=')
      obj6[item[0]] = item[1]
    })
    console.log(obj6)
    
    //打印结果:
    //{ id: '01', name: '张大大', pid: '', job: '项目经理' }

     

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值