普通函数和公共(高级)函数封装

const people: obj[] = [
  {
    name: 's1',
    age: 18,
    sex: 'male'
  },
  {
    name: 's2',
    age: 19,
    sex: 'male'
  },
  {
    name: 's3',
    age: 20,
    sex: 'female'
  },
  {
    name: 's4',
    age: 21,
    sex: 'male'
  },
  {
    name: 's5',
    age: 22,
    sex: 'female'
  },
]
interface obj {
  name: string,
  sex: string,
  age: number
}


// 普通函数封装
const groupBy2 = (arr: Array<obj>, name: string) => {
  const result = {} as any
  // forEach 和 for 都可以,个人习惯
  arr.forEach((item: any) => {
    const key = item[name]
    if (result[key]) {
      result[key].push(item)
    } else {
      result[key] = [item]
    }
  })
  return result
}

// 调用时传入对应的数组和对象需要分组的字段
console.log(groupBy2(people,'sex'))

// 公共函数封装
const groupBy = (arr: Array<obj>, generateKey: any) => {

  if (typeof generateKey == 'string') {
    const generateName = generateKey
    generateKey = (item: any) => item[generateName]
  }

  const result = {} as any
  arr.forEach((item: obj, index: number) => {
    const key = generateKey(item, index, arr)
    if (result[key]) {
      result[key].push(item)
    } else {
      result[key] = [item]
    }
  })
  return result
}

// 调用是传入对应的数组和对象的方法(可以按自己需要的格式),也可以只传对应的字段
const res = groupBy(people, (i: any) => (i.age % 2 == 0 ? `奇数` : `偶数`))
const res2 = groupBy(people, (i: any) => `${i.sex}`)
const res3 = groupBy(people, 'sex')

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值