对象数组属性一致的重新分组

代码其实还可以优化,但项目赶,先放在这

let ss = gg2(arr2, arr2, true ,{key: 'bool',
thenBy: {key: 'value', beforeKeys: ['bool'],
thenBy: {key: 'unit', beforeKeys: ['bool', 'value'],
thenBy: {key: 'valueset', beforeKeys: ['bool', 'value', 'unit']}}
}});
console.log(ss)

结果如下:

在这里插入图片描述

const arr2 = [
  {id: '1', bool: true, value: '38.5', unit: 'mg', valueset: null, index: 1},
  {id: '1', bool: true, value: '38.5', unit: 'mg', valueset: null, index: 2},
  {id: '1', bool: true, value: '38.5', unit: 'kg', valueset: null, index: 3},
  {id: '1', bool: true, value: '36.5', unit: 'mg', valueset: null, index: 4},
  {id: '1', bool: true, value: '36.5', unit: 'kg', valueset: null, index: 5},
  {id: '1', bool: true, value: '36.5', unit: 'kg', valueset: null, index: 6},
  {id: '1', bool: false, value: '38.5', unit: 'mg', valueset: 'null1', index: 7},
  {id: '1', bool: false, value: '38.5', unit: 'kg', valueset: null, index: 8},
  {id: '1', bool: false, value: '36.5', unit: 'mg', valueset: null, index: 9},
  {id: '1', bool: false, value: '36.5', unit: 'kg', valueset: null, index: 10},
  {id: '1', bool: null, value: '37.5', unit: 'mg', valueset: null, index: 11},
  {id: '1', bool: null, value: '35.5', unit: 'kg', valueset: 'null1', index: 12},
  {id: '1', bool: null, value: '37.5', unit: 'mg', valueset: null, index: 13},
  {id: '1', bool: true, value: '38.5', unit: 'mg', valueset: 'null1', index: 14},
]


function gg2(reduceList, arrays, isFirst ,pan) {
  let tempp = {};
  let list = [];
  let a = [];
  const key = pan.key;
  const beforeKeys = pan.beforeKeys;
  if (isFirst) {
    a= reduceList.reduce((prev, curv) => {
    if (tempp[curv[key]]) {
      }else {
          tempp[curv[key]] = true;
          prev.push(curv);
      }
      return prev
    }, []);
    a.forEach((item) => {
      const b = arrays.filter((data) => data[key] === item[key]);
      list.push(b);
    })
  } else {
    reduceList.forEach((item) => {
      tempp = {};
      a.push(item.reduce((prev, curv) => {
        if (tempp[curv[key]]) {
        }else {
          tempp[curv[key]] = true;
          prev.push(curv);
        }
      return prev
      }, []));
    })
    let c = 'data[key] === item2[key]';
    beforeKeys.forEach((item) => {
      c = `${c} && data['${item}'] === item2['${item}']`
    })
    a.forEach((item) => {
      item.forEach((item2) => {
        list.push(arrays.filter((data) => eval(c)));
      })
    })
  }
  if (pan.thenBy) {
    return gg2(list, arrays, false, pan.thenBy)
  } else {
    return list
  }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值