树型数据筛选,过滤,和查找某一个,从树型数据中把所有的子节点取出来

树结构的数据筛选

  const filters = (e: any) => {
    let { value } = e.target;
    let d = JSON.parse(JSON.stringify(treeDataOld));
    let datax = filtersX(value, d);
    setTreedata(datax);
  };
  const filtersX = (val: any, data: Array<any>) => {
    data.forEach((item: any) => {
      if (item.children && item.children.length) {
        item.children = (item.children || []).filter((x: any) => {
          if (x.children && x.children.length) {
            return x.children
              .map((a: any) => a.name)
              .toString()
              .includes(val);
          }
          return x.name.indexOf(val) !== -1;
        });
        filtersX(val, item.children);
      }
    });
    return data;
  };

效果图

树型数据筛选,过滤,和查找某一个,从树型数据中把所有的子节点取出来_第1张图片

从树结构的数据里查找某一个

const finditem = (arr: Array<any>, key: string) => {
    let obj = "";
    finditemx(arr, key);
    return obj;
    function finditemx(arr: Array<any>, key: string) {
      for (let i = 0; i < arr.length; i++) {
        const item = arr[i];
        if (item.key === key) {
          obj = item;
          break;
        }
        if (item.children) {
          finditemx(item.children, key);
        }
      }
    }
  };

从树型数据中把所有的子节点取出来

  function loop(data: Array<any>) {
    let temp: Array<any> = [];
    loopx(data);
    return temp;
    function loopx(data: Array<any>) {
      if (Array.isArray(data)) {
        data.forEach((item) => {
          if (item.children && item.children.length) {
            loopx(item.children);
          } else {
            temp.push(item);
          }
        });
      }
    }
  }

你可能感兴趣的:(js,javascript,前端)