相同的数组,合在一起 数组对象的value值相等 合并成新的数组对象

文章展示了如何使用JavaScript中的forEach、findIndex、find、reduce以及hash对象的方法对具有相同属性的数组元素进行分组和处理。通过这些方法,可以将具有相同学校属性的学生对象归类到对应的学校下,形成一个新的结构。
摘要由CSDN通过智能技术生成

let array = [
    { name: '法外狂徒',age: 20,school: '北大青鸟' },
    { name: '张三',age: 21,school: '蓝翔技校' },
    { name: "黄二狗", age: 19, school: "蓝翔技校" },
    { name: '非常可乐',age: 18,school: '北大青鸟' },
    { name: '可口可乐',age: 19,school: '北大青鸟' },
    { name: '百事可乐',age: 21,school: '哈尔滨佛学院' },
]

///

let data = [
  {
    school: "北大青鸟",
    children: [
      { name: "法外狂徒", age: 20, school: "北大青鸟" },
      { name: "非常可乐", age: 18, school: "北大青鸟" },
       { name: '可口可乐',age: 19,school: '北大青鸟' },
    ]
  },
  {
    school: "蓝翔技校",
    children: [
      { name: "张三", age: 21, school: "蓝翔技校" },
      { name: "黄二狗", age: 19, school: "蓝翔技校" },
    ]
  },
  {
    school: "哈尔滨佛学院",
    children: [
      { name: "百事可乐", age: 21, school: "哈尔滨佛学院" },
    ]
  },
]

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

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))
使用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)
 
    }
 
})
利用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) 
 
  } 
 
})
利用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] 
 
  }
 
})
使用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 
 
    }
 
  ) 
 
})

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值