数组根据相同的属性push自己的to数组 (比如你们的父节点相同创造chindren数组,根据相同的父亲(label)创造不同的children(to))

这段代码主要展示了如何处理和合并数据以生成用于绘制桑基图的数据结构。通过遍历和查找操作,将具有相同标签的数据项进行整合,并计算总数值。最终,将处理后的数据保存到`newchangetodata`数组中,为后续的桑基图渲染做准备。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

逻辑代码

 // 4.糅合数据 合并to属性 造出桑基图的数据
      const newchangetodata = [];
      const arrDimensions = [];
      const changeto = (newarr) => {
        arrDimensions.push(sortArr(newarr, 'level'));

        sortArr(newarr, 'level').forEach((itemn) => {
          // eslint-disable-next-line prefer-const
          let newArr = [];

          // eslint-disable-next-line no-const-assign
          //  for (let i = 0; i < itemn.length; i++) {
          for (let i = 0; i < itemn.length; i++) {
            // eslint-disable-next-line vars-on-top
            // eslint-disable-next-line @typescript-eslint/no-loop-func
            // eslint-disable-next-line array-callback-return
            const index = newArr.findIndex((item) => {
              if (item.label && itemn[i].label) {
                return item.label === itemn[i].label;
              }
            });
            if (index !== -1) {
              newArr[index].to.push({
                target: itemn[i].to[0].target,
                value: itemn[i].to[0].value,
                type: itemn[i].to[0].type,
                level: itemn[i].to[0].level,
                flow_in_ratio: itemn[i].to[0].flow_in_ratio,
                flow_out_ratio: itemn[i].to[0].flow_out_ratio,
              });
              // newArr[index].value.push(itemn[i].value);
            } else {
              newArr.push({
                label: itemn[i] && itemn[i].label,
                id: itemn[i].id,
                level: itemn[i].level,
                type: itemn[i].type,
                to: itemn[i].to,
                crowdId: itemn[i].crowdId,
                height: itemn[i].to[0].value < 200 ? itemn[i].to[0].value : 200,
                color: colorArr[randomnum(0, colorArr.length)],
                flow_in_ratio: itemn[i].flow_in_ratio,
                flow_out_ratio: itemn[i].flow_out_ratio,
              });
            }
          }
          newArr.forEach((item) => {
            newarrs.push(item);
          });
        });
        // console.log(newarrs, 'newarrs')
        newarrs.forEach((item) => {
          let nums = 0;
          if (item.to) {
            item.to.forEach((ite) => {
              nums += Number(ite.value);
            });
            item.totalmumber = nums;
          }
        });
        //
        const maxarr = [];
        newarrs.forEach((item) => {
          if (item.totalmumber) {
            maxarr.push(item.totalmumber);
          }
        });
        newarrs.forEach((item) => {
          let maxnum = 0;
          maxnum = Math.max(...maxarr);
          item.maxnums = maxnum;
        });

        //
        newchangetodata.push(newarrs);
        newarrs = [];
      };
      console.log(newchangedata, 'newchangedata') 原数据
      newchangedata.forEach((item) => {
        changeto(item);
      });
      const idarr = [];
      newchangetodata.forEach((ite) => {
        ite.forEach((item) => {
          idarr.push(item.id);
        });
      });
      console.log(newchangetodata, 'newchangetodata') 转换的数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值