在平常工作中,我们经常遇到各种数据处理,尤其是数组对象的处理

比如我遇到的一组数据如下:

let array = [
    { name: '小明',age: 20,school: '清华' },
    { name: '小红',age: 21,school: '清华' },
    { name: '小白',age: 18,school: '北大' },
    { name: '小黄',age: 19,school: '北大' },
    { name: '小浪',age: 21,school: '哈佛' },
]

需要将其处理成:

let data = [
  {
    school: "清华",
    children: [
      { name: "小明", age: 20, school: "清华" },
      { name: "小红", age: 21, school: "清华" },
    ]
  },
  {
    school: "北大",
    children: [
      { name: "小白", age: 18, school: "北大" },
      { name: "小黄", age: 19, school: "北大" },
    ]
  },
  {
    school: "哈佛",
    children: [
      { name: "小浪", age: 21, school: "哈佛" },
    ]
  },
]

刚开始我还犯难,牛肯南瓜,后来慢慢地遇到的多了就熟悉了,也总结了几个方法

1、使用空对象接收数据(最开始最常用的)


let object = {}

array.forEach((item) => {

  let { school } = item

  if (!object[school]) {

    object[school] = {

      school,

      children: []

    }

  }

  object[school].children.push(item)

})

console.log(Object.values(object))

2、使用findIndex方法

let arr2 = []

array.forEach((item, index) => {

    let has = arr2.findIndex(o => o.school === item.school);

    if (has == -1) {

        arr2.push({

            school: item.school,

            age: item.age,

            children: [item]

        })

    } else {

        arr2[has].children.push(item)

    }

})

3、利用find查找来处理 

let newList = [] 

array.forEach(item => { 

  let newItem = newList.find((i) => i.school == item.school) 

  if (!newItem) { 

    newList.push({ school: item.school, children: [item] }) 

  } else { 

    newItem.children.push(item) 

  } 

})

4、使用hash对象(这个我自己不怎么常用)

let hash = {}; 

let index = 0; 

let array1 = []; 

array.forEach(function(item) { 

  let school = item.school; 

  hash[school] ? array1[hash[school] - 1].children.push(item) : hash[school] = ++index && res.push(

    { 

      children: [item], 

      school: school, 

      age: item.age 

    }

  ) 

})

5、最后一个就是利用reduce方法进行处理

let Obj = array.reduce((pre,cur,index)=> { 

  if(!pre[cur.school]){ 

    pre[cur["school"]] =[cur] 

  } else { 

    pre[cur.school].push(cur) 

  } 

  return pre; 

},{}) 

let aff= Object.keys(Obj).map((item)=>{

  return { 

    school:item, 

    children:Obj[item] 

  }

}) 

综上,处理这种数据有很多的方法,也肯定有比我的更好的,但我希望能帮到需要帮助的小可爱们

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐