数组里面的对象根据key值分类

4 篇文章 0 订阅
4 篇文章 0 订阅

对数组里面的对象根据一定的规则进行分类

最近碰到一个需求,很简单,对数组里面的对象进行分类,这个需求是根据对象的某个对象进行分类的,例如这样:

[
    {
      "category": "测试流程1",
      "title": "1112",
    },
    {
      "category": "测试流程2",
      "title": "ddd",
    },
    {
      "category": "测试流程2",
      "title": "vvvv",
    },
    {  "category": "测试流程1",
      "title": "14442",
    },
    ...
  ]

类似上面这样的数据,可能会有 测试流程3、测试流程4…,每个流程分类下可能都要很多数据,现在要把流程分类相同的数据放在一起,分成这样的数据:

[
   [{
      "category": "测试流程1",
      "title": "1112",
    },{  "category": "测试流程1",
      "title": "14442",
    }],
    [{
      "category": "测试流程2",
      "title": "ddd",
    },{
      "category": "测试流程2",
      "title": "vvvv",
    }]
    ...
  ]

================================
好了,需求介绍到这里。原始的解决方法就是先数组所有的分类先遍历再去重,然后再遍历一遍,分类相同的放在一起,优点代码浅显易懂,缺点是遍历次数太多了,浪费性能。

无意中看到 reduce 这个api,这个api好像可以做很多事,于是尝试用reduce实现这个需求(简化了很多):

const result = data.reduce((a, b) => {
   if (a[b.category]) {
       a[b.category].push(b);
   } else {
       a[b.category] = [b];
   }
   return a
}, {});

console.log(result);

传入一个空的对象,如果没有分类,则创建这个分类,并赋值一个数组,如果已经有这个分类,则把当前数据push到分类对应的数组,是不是so easy

==========================================================
重点:其实用forEach也可以实现,关键是利用对象的key值!思路很重要,当然还要不断的尝试,寻找最优解

(ps: reduce性能与forEach差不多,reduce稍微强一点点,不过reduce写法看起来稍显牛逼)for/forEach/reduce性能对比

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值