处理嵌套未知层级的对象数组数据

不知道你们有没有在项目中遇到特别复杂的数据,最近的项目就遇到过,其实说实话并不是数据有多复杂,主要是太多,因为很多数据的处理无非就是过滤,去重等等这几种方式

  1. 数据
const q = [
    {
      id: 1,
      name: "李四1",
      children: [
        { id: 1, name: "李四1" },
        { id: 2, name: "李四" },
        { id: 2, name: "李四" },
        { id: 1, name: "李四1" },
        { id: 5, name: "李四5" },
      ],
    },
    {
      id: 2,
      name: "李四",
      children: [
        { id: 1, name: "李四1" },
        { id: 2, name: "李四" },
        { id: 2, name: "李四" },
        { id: 1, name: "李四1" },
        { id: 5, name: "李四5" },
      ],
    },
    { id: 2, name: "李四" },
    { id: 1, name: "李四1" },
    { id: 5, name: "李四5" },
  ];

当让原先的数据肯定不是这个的,这些数据只是我在网上随便搜了个类似的,真实的数据比这复杂的很多,而且我拿到这个数据是要渲染成一棵树形控件的,类似下方这个
在这里插入图片描述
首先需要对数据过滤,因为树形控件有自己的字段对应的,所以我们需要对数据的字段转换。
因为不知道有多少层级,所以递归处理是一定的

// 过滤字段
  const formatFormDataWrap = nodes => {
    return nodes.map(item => {
      let children = [];
      let dis = true;
      if (item.children && item.children.length > 0) {
        dis = false;
        children = formatFormDataWrap(item.children);
      }
      // 以下就是你真实要输出的字段,可自行调整
      return {
        biztype: item.bizType,
        label: item.showName,
        key: item.treePath,
        disabled: dis ? item.must : dis,
        children: children,
      };
    });
  };

  1. 树形控件需要保证key值是唯一的,所以我们需要对数据进行去重处理
// 去重
  const handleRepeat = nodes => {
    var obj = {};
    return nodes.reduce(function (item, next) {
      if (next.children && next.children.length > 0) {
        next.children = handleRepeat(next.children);
      }
      obj[next.key] ? "" : (obj[next.key] = true && item.push(next));
      return item;
    }, []);
  };

其实对庞大复杂的数据处理只要自身对递归方法理解的稍微好点,都是比较简单的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值