数组过滤筛选

  getGroup(arr: any[], name: string | string[]) {

    // 单个字符串

    if (typeof name === 'string') {

      const a = [];

      arr.forEach((item1: any) => {

        const flag = a.some((item2: any) => item2[name] === item1[name]);

        if (!flag) {

          a.push(item1);

        }

      });

      return a.map((item1: any) => {

        const groupList = arr.filter((item2: any) => item2[name] === item1[name]);

        return {

          name: item1[name],

          groupList

        };

      });

    }

    // 多个字符串

    if (typeof name === 'object' && name instanceof Array && name.length > 0) {

      const a = [];

      let b = [];

      arr.forEach((item1: any) => {

        const obj = {};

        name.forEach((item2: any) => {

          obj[item2] = item1[item2];

        });

        b.push(obj);

      });

      const o = {};

      b.reduce((item, next) => {

        o[JSON.stringify(next)] ? '' : o[JSON.stringify(next)] = true && item.push(next);

        return item;

      }, []).map((item1: any) => {

        const groupList = [];

        arr.filter((item2: any) => {

          const flagList = [];  // 每个值对比状态

          name.forEach((item3: any) => {

            flagList.push(item1[item3] === item2[item3]);

          });

          if (flagList.every((item4: any) => item4 === true)) {

            groupList.push(item2);

          }

        });

        a.push({

          ...item1,

          groupList

        });

      });

      return a;

    }

    return arr;

  }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值