将对象数组转换成二维数组

  • Post author:
  • Post category:其他

1. 实现一个函数将对象数组处理成二维数组

let sourceData = [
   {name:"张三",age: 18}, {name: "李四",age: 28 }, {name: "王五",age: 38}
]

let targetData = [
   ['张三', 18],
   ['李四', 28],
   ['王五', 38]
]

参考结果:

思路:

1. 首先要想要遍历sourceData数组

2. 想想怎么才能拿到value值呢,当然可以用到Object.values() 结果会得到一个数组

3.然后再套一个数组是不是就是双层数组了呢?

  <script>
     // 源数据 - 要处理的数据
     let sourceData = [
         { name: "张三", age: 18 },
         { name: "李四", age: 28 }, 
         { name: "王五", age: 38 }
    ]

 
    function transData(sourceData) {
        // 定义一个空数组 - 最后处理后返回的还是一个数组,return出来的
        let newArr = []
        //对源数据进行循环遍历
        sourceData.forEach(item => {
            //item 是遍历出来的每一条对象 => { name: "张三", age: 18 }
            //用Object.values()方法 拿到每个对象的value值 - 组成一个新的数组
            const arr  = Object.values(item) // arr就是新组成的 => ['张三', 18]
            console.log(22,arr)
            // 将新的小数组 添加到 一个大数组中
            newArr.push(arr)
        })
        return newArr
    }
 
   const res =  transData(sourceData)
   console.log(res);

  </script>

2. 实现一个函数可以将源数据按照header做匹配产出二维数组

let sourceData = [
   {name:"张三",age: 18, height:180}, 
   {name: "李四",age: 28,height:160}, 
   {name: "王五",age: 38,height:170}
]

function tansData(souceData,header){}

header -> ['name','age']
targetData = [
   ['张三', 18],
   ['李四', 28],
   ['王五', 38]
]

header -> ['name','height']
targetData = [
   ['张三', 180],
   ['李四', 160],
   ['王五', 170]
]

参考结果:

方案一: 

思路: 

1. 通过Object.keys() 拿到sourceData数组的key值

2.然后通过includes进行匹配

3.匹配上之后把value值放到一个数组中

4.最后再套一层数组

    function tansData(souceData,header){
      let newArr = []
      souceData.forEach(item => {
        let arr = []
        // console.log(Object.keys(item))
        let keyArr = Object.keys(item)
        keyArr.forEach(key => {
          if(header.includes(key)) {
            // console.log(item[key])
            arr.push(item[key])
          }
        })
        newArr.push(arr)
      })
      return newArr
    }

    const test1 = tansData(sourceData,['name','age'])
    const test2 = tansData(sourceData,['name','height'])
    console.log(test1)
    console.log(test2)

方案二:

思路:

1. 遍历souceData

2.遍历header

3.通过三元表达式进行判断

    function tansData(souceData,header){
      let newArr = []
      souceData.forEach(item => {
        let arr = []
        header.forEach(data => {
          console.log(item[data])   // 拿到的是value值
          item[data] ? arr.push(item[data]) : ""
        })
        newArr.push(arr)
       })
       return newArr
    }

    const test1 = tansData(sourceData,['name','age'])
    const test2 = tansData(sourceData,['name','height'])
    console.log(test1)
    console.log(test2)


版权声明:本文为weixin_46413834原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。