前端遍历树形数据,返回满足条件的树形数据

在一次做手机端小程序项目中,有一个机构表单项,需要在页面展示是树形层级结构,但是后端开发人员返回的数据却是一维数组,而且还要在前端做过滤筛选功能。但是在使用的手机端组件库中,却没有展示树形的组件。无奈只能自己自定义一个。在此,简单记录一下,使用的js方法。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <script>
      let tree = [
        {
          id: "1",
          name: "一级1",
          children: [
            {
              id: "1-1",
              name: "二级1-1",
              children: [
                {
                  id: "1-1-1",
                  name: "节点1-1-1",
                },
              ],
            },
            {
              id: "1-2",
              name: "一级1-2",
              children: [
                {
                  id: "1-2-1",
                  name: "二级1-2-1",
                },
                {
                  id: "1-2-2",
                  name: "节点1-2-2",
                },
              ],
            },
          ],
        },
        {
          id: "2",
          name: "节点2",
          children: [
            {
              id: "2-1",
              name: "节点2-1",
            },
          ],
        },
        {
          id: "3",
          name: "一级3",
          children: [
            {
              id: "3-1",
              name: "二级3-1",
            },
          ],
        },
      ];
      /**
       * @author 过滤数据
       * @param {*} value
       * @param {*} arr
       * @return {*} []
       */
      const TreeData = (value, arr) => {
        if (!arr) {
          return [];
        }
        let newList = [];
        arr.forEach((item) => {
          if (item.name.indexOf(value) > -1) {
            const Children = TreeData(value, item.children);
            const obj = {
              ...item,
              children: Children,
            };
            newList.push(obj);
          } else {
            if (item.children && item.children.length > 0) {
              const Children = TreeData(value, item.children);
              const obj = {
                ...item,
                children: Children,
              };
              if (Children && Children.length > 0) {
                newList.push(obj);
              }
            }
          }
        });
        return newList;
      };
      console.log(TreeData("节点", tree));
    </script>
  </head>
  <body></body>
</html>

原创文章,作者:ZERO,如若转载,请注明出处:https://www.edu24.cn/course/javascript/js-filter-tree.html

Like (0)
Donate 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
ZEROZERO
Previous 2022年11月5日
Next 2022年11月8日

相关推荐

  • 深入理解JS内存机制

    JS的内存机制在很多前端开发者看来并不是那么重要,但是如果你想深入学习JS,并将它利用好,打造高质量高性能的前端应用,就必须要了解JS的内存机制。对于内存机制理解了以后,一些基本的…

    2019年7月14日
    1.6K
  • 创建JavaScript对象的六种方式

    第一种:Object 构造函数创建 这行代码创建了 Object 引用类型的一个新实例,然后把实例保存在变量 Person 中。 第二种:使用对象字面量表示法 对象字面量是对象定义…

    2020年6月24日
    1.2K
  • 深入理解JS原型和继承

    在学习JS中的原型,原型链,继承这些知识之前,必须先了解并掌握基础知识:函数和对象的关系。 我们一直都知道,函数也是对象的一种,因为通过instanceof就可以判断出来。但是函数…

    2019年6月29日
    2.0K
  • 日常开发 26 个常见的 JavaScript 代码优化方案

    1、NULL、Undefined、”【空】检查 我们在创建新变量赋予一个存在的变量值的时候,并不希望赋予null或undefined,我们可以采用以下简洁的赋值方式。 …

    2021年2月22日
    1.2K
  • JavaScript基础知识八问

    JavaScript是前端开发中非常重要的一门语言,浏览器是他主要运行的地方。JavaScript是一个非常有意思的语言,但是他有很多一些概念,大家经常都会忽略。比如说,原型,闭包…

    2020年12月30日
    890
  • 如何判断一个对象为数组

    使用 instanceof 操作符 原理 instanceof 的内部机制是通过判断对象的原型链中是不是能找到类型的 prototype。 使用 instanceof 判断一个对象…

    2020年7月3日
    1.0K
  • 函数防抖与函数节流

    函数防抖 定义 触发高频事件后 n 秒内函数只会执行一次,如果 n 秒内高频事件再次被触发,则重新计算时间;更直白一点就是:一个需要频繁触发的函数,在规定时间内,只让最后一次生效,…

    2020年7月17日
    1.3K
  • 回调函数散记

    今天被将要入职的公司的开发人员询问了一个项目中遇到的问题,关于函数内访问外部函数的情况。大致现象如下:js文件中有两个同级函数FnA和FnB,想在函数FnA中调用FnB。 一看就是…

    2019年8月16日
    1.4K
  • JavaScript 的 this 原理

    有时候会使用一种东西,并不代表你了解它。就像你会写JavaScript代码,能看懂JavaScript代码,但不代表你懂它。 学懂 JavaScript 语言,一个标志就是理解下面…

    2019年8月1日
    1.7K
  • js数组去重(区分object、“NaN”、NaN)

    数组去重在前端面试中比较常见,今天来复习复习。 对这样一个数组进行去重,我尝试了几种方法,大多数不能对对象去重,或者不能区分true和”true”、NaN和…

    2021年2月23日
    1.2K