对树形数据的处理 记录

5 篇文章 0 订阅

1.对树形数据模糊搜索 转载 原创作者小丶侯

搜索结果

 

let arr = [
    {
        title: '你好吗?',
        children: [
            {
                title: '很好啊',
                children: null
            },
            {
                title: '是吗',
                children: null
            }
        ]
    },
    {
        title: '卡卡卡',
        children: [
            {
                title: '非常好芬',
                children: null
            }
        ]
    },
    {
        title: '第三方的',
        children: null
    }
];

const rebuildData=(value, arr) => {
    let newarr = [];
    arr.forEach(element => {
    if (element.children && element.children.length) {
      const ab = rebuildData(value,element.children);
      const obj = {
        ...element,
        children: ab
      };
      if (ab && ab.length) {
        newarr.push(obj);
      }
    } else {
      if (element.title.indexOf(value) > -1) {
        newarr.push(element);
      }
    }
  });
  return newarr;
};
console.log(rebuildData( '好', arr));

2. 树结构找父级 里面使用了ts 如果不需要把直接把 :any 删除

// 树状数据查找直接父元素
export const findParentNode = (treeData: any, value: any, record: any) => {
  let data = { ...record, children: treeData };
  let result: any;
  if (!data) {
    return;
  }
  for (let i = 0; i < data.children.length; i++) {
    let item = data.children[i];
    if (item.value == value) {
      result = data;
      return result;
    } else if (item.children && item.children.length > 0) {
      result = findParentNode(item.children, value, item);
      if (result) {
        return result;
      }
    }
  }
  return result;
}

3. 线形数据转树形数据 转载 原创已经忘记在哪看见了抱歉

function fommat({
  arrayList,
  pidStr = 'menuParentId', //上树形结构上级key
  idStr = 'menuId',        // 当前key
  childrenStr = 'children',
}) {
  let listOjb = {}; // 用来储存{key: obj}格式的对象
  let treeList = []; // 用来储存最终树形结构数据的数组
  // 将数据变换成{key: obj}格式,方便下面处理数据
  for (let i = 0; i < arrayList.length; i++) {
    listOjb[arrayList[i][idStr]] = arrayList[i];
  }
  // 根据pid来将数据进行格式化
  for (let j = 0; j < arrayList.length; j++) {
    // 判断父级是否存在
    let haveParent = listOjb[arrayList[j][pidStr]];
    if (haveParent) {
      // 如果有没有父级children字段,就创建一个children字段
      !haveParent[childrenStr] && (haveParent[childrenStr] = []);
      // 在父级里插入子项
      haveParent[childrenStr].push(arrayList[j]);
    } else {
      // 如果没有父级直接插入到最外层
      treeList.push(arrayList[j]);
    }
  }
  return treeList;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值