前端数组如果筛选过滤成这样的数据

如下

    <script>
const  listData=[
{name:"name1",type:"收",currency:"cny",amount:152},  //1
{name:"name1",type:"收",currency:"cny",amount:12},  //2
{name:"name1",type:"收",currency:"cny",amount:125}, //3
{name:"name1",type:"付",currency:"jpy",amount:1112}, //4
{name:"name1",type:"付",currency:"eur",amount:1112}, //5
{name:"name1",type:"付",currency:"usd",amount:12},  //6
{name:"name4",type:"付",currency:"eur",amount:142}, //7
{name:"name2",type:"付",currency:"eur",amount:132}, //8
];
// 得到的预期结果希望是
// 收 name1  cny   289    //1 ,2 ,3 合并
// 付 name1  jpy   1112   //4
// 付 name1  eur   1112   //5
// 付 name1  usd   12   //6
// 付 name4  eur   142   //7
// 付 name2  eur   132   //8
//条件就是 把 name, type, currency相同的都合并起来
</script>

我暂时想到了group by ->group by ->group by 三次搂出来,有没有大哥有好的想法

回答

已处理 thx

  //币种
  let _currency= [...new Set(preApprovalArr.value.map((it: { CurrencyDesc: any }) => it.CurrencyDesc) as [])];
  // 类型
  let _billFeeTypeDesc= [...new Set(preApprovalArr.value.map((it: { BillFeeTypeDesc: any }) => it.BillFeeTypeDesc) as [])];
  
  let __billFee=getGroup(preApprovalArr.value,'BillFeeTypeDesc');
  _billFeeTypeDesc.forEach((element:any) => {
   let __currency=  getGroup(__billFee[element],'CurrencyDesc');
      _currency.forEach((currencyItem:any) => {
      console.log(element,currencyItem,__currency[currencyItem],"currencyItem");
  });
  });
}

const getGroup=(data:any,key:any)=>{
    let groups={};
    data.forEach((c:any)=>{
        let value=c[key];
        groups[value]=groups[value]||[];
        groups[value].push(c);
    });
    return groups;
}


以上是前端数组如果筛选过滤成这样的数据的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>