iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >JavaScript扁平数据转tree与tree数据扁平化的方法
  • 176
分享到

JavaScript扁平数据转tree与tree数据扁平化的方法

2023-07-02 08:07:11 176人浏览 安东尼
摘要

这篇文章主要介绍“javascript扁平数据转tree与tree数据扁平化的方法”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JavaScript扁平数据转tree与tree数据扁平化的方法”文章

这篇文章主要介绍“javascript扁平数据转tree与tree数据扁平化的方法”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JavaScript扁平数据转tree与tree数据扁平化的方法”文章能帮助大家解决问题。

    一、写在前面

    有时我们拿到的数据的数据结构可能不是理想的,那么此时就要求前端程序员,具有改造数据的能力。例如拿到扁平的数据, 但我们要应用在 tree 树形组件或 Cascader 级联选择器组件中,这样的组件要求数据结构是非扁平的的具有层级递进关系的 tree 结构。

    总之就是说,提供数据的接口给到的数据,未必符合要求,而当我们又无法令他人为为我们改变时,需求和要求就来到了前端程序员这里, 所以得具备这样的数据处理能力。

    下面是将举两个数据改造的例子:

    • 一是扁平化,具有层级递进关系的 tree 数据,转换为扁平结构的的 flat 数据

    • 二是反扁平化,扁平结构的 flat 数据,转换为具有层级递进关系的 tree 数据

    二、正文部分

    2.1 扁平数据转为 tree 数据

    扁平化函数

        function treeToFlat (treeList, flatList) {    // flatList.length > 9999 是考虑底线保护原则,出于极限保护的目的设置的,可不设或按需设置。    if (flatList.length > 9999) {      return    }    treeList.map(e => {      flatList.push(e)      // 递归:有条件的自己调用自己,条件是 e.children.length 为真      if (e.children && e.children.length) {        treeToFlat(e.children, flatList)      }    })    // console.log('扁平化后:', flatList)    return flatList  }

    2.2 tree 数据转为扁平数据

    反扁平化函数

        function flatToTree (flatList, treeList) {    flatList.map(e => {      // 以 e.pid===null,作为判断是不是根节点的依据,或者直接写死根节点(如果确定的话),      // 具体以什么作为判断根节点的依据,得看数据的设计规则,通常是判断层级或是否代表根节点的标记      if (e.pid === null) {        // 避免出现重复数据        const index = treeList.findIndex(sub => sub.id === e.id)        if (index === -1) {          treeList.push(e)        }      }      flatList.map(e2 => {        if (e2.pid === e.id) {          // 避免出现重复数据          const index = e.children.findIndex(sub => sub.id === e2.id)          if (index === -1) {            e.children.push(e2)          }        }      })    })

    2.3 完整测试 demo

    demo 测试结果截图如下:

    JavaScript扁平数据转tree与tree数据扁平化的方法

    <!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>扁平数据转tree与tree数据扁平化 Demo</title></head><body><h2>扁平数据转tree与tree数据扁平化</h2><script>  window.onload = function () {    test()  }  function test () {    let flatList = [],      treeList = [        {          id: 1,          pid: null,          label: '第一层',          value: '1',          children: [            {              id: 2,              pid: 1,              label: '第二层1',              value: '2.1',              children: []            },            {              id: 3,              pid: 1,              label: '第二层2',              value: '2.2',              children: []            },            {              id: 4,              pid: 1,              label: '第二层3',              value: '2.3',              children: [                {                  id: 5,                  pid: 4,                  label: '第三层1',                  value: '3.1',                  children: []                },                {                  id: 6,                  pid: 4,                  label: '第三层2',                  value: '3.2',                  children: []                },              ]            },          ]        }      ]    console.log('原始 tree 数据:', JSON.parse(jsON.stringify(treeList)))    // 扁平化    console.log('tree =>flat,扁平化后:', treeToFlat(JSON.parse(JSON.stringify(treeList)), flatList))    // 反扁平化,SON.parse(JSON.stringify()) 为了实现深拷贝    console.log('flat =>tree,反扁平化后:', flatToTree(JSON.parse(JSON.stringify(flatList)), treeList))  }    function treeToFlat (treeList, flatList) {    // flatList.length > 9999 是考虑底线保护原则,出于极限保护的目的设置的,可不设或按需设置。    if (flatList.length > 9999) {      return    }    treeList.map(e => {      flatList.push(e)      // 递归:有条件的自己调用自己,条件是 e.children.length 为真      if (e.children && e.children.length) {        treeToFlat(e.children, flatList)      }    })    // console.log('扁平化后:', flatList)    return flatList  }    function flatToTree (flatList, treeList) {    flatList.map(e => {      // 以 e.pid===null,作为判断是不是根节点的依据,或者直接写死根节点(如果确定的话),      // 具体以什么作为判断根节点的依据,得看数据的设计规则,通常是判断层级或是否代表根节点的标记      if (e.pid === null) {        // 避免出现重复数据        const index = treeList.findIndex(sub => sub.id === e.id)        if (index === -1) {          treeList.push(e)        }      }      flatList.map(e2 => {        if (e2.pid === e.id) {          // 避免出现重复数据          const index = e.children.findIndex(sub => sub.id === e2.id)          if (index === -1) {            e.children.push(e2)          }        }      })    })    // console.log('反扁平化后:', treeList)    return treeList  }</script></body></html>

    关于“JavaScript扁平数据转tree与tree数据扁平化的方法”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网精选频道,小编每天都会为大家更新不同的知识点。

    --结束END--

    本文标题: JavaScript扁平数据转tree与tree数据扁平化的方法

    本文链接: https://www.lsjlt.com/news/340822.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • JavaScript扁平数据转tree与tree数据扁平化的方法
      这篇文章主要介绍“JavaScript扁平数据转tree与tree数据扁平化的方法”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JavaScript扁平数据转tree与tree数据扁平化的方法”文章...
      99+
      2023-07-02
    • JavaScript前端面试扁平数据转tree与tree数据扁平化
      目录一、写在前面二、正文部分2.1 扁平数据转为 tree 数据2.2 tree 数据转为扁平数据2.3 完整测试 demo三、写在后面一、写在前面 有时我们拿到的数据的数据结构可能...
      99+
      2022-11-13
    • JavaScript数组扁平转树形结构数据(Tree)的实现
      前言 之前面试有遇到过这个问题,面试官问:如何把一个数组数据扁平,然后转化为Tree结构数据,工作中刚好也用到了,在这里总结一下。 需求大致如下 把这个数组转为树形结构数据(Tree...
      99+
      2022-11-13
      JavaScript数组扁平转树形结构 javascript扁平数组转树形结构
    • web前端怎么将扁平数据结构转Tree
      这篇文章主要介绍“web前端怎么将扁平数据结构转Tree”,在日常操作中,相信很多人在web前端怎么将扁平数据结构转Tree问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”web前端怎么将扁平数据结构转Tree...
      99+
      2023-07-02
    • 高级前端面试手写扁平数据结构转Tree
      目录前言什么是好算法,什么是坏算法时间复杂度计算方法空间复杂度计算方法:不考虑性能实现,递归遍历查找不用递归,也能搞定最优性能小试牛刀前言 招聘季节一般都在金三银四,或者金九银十。最...
      99+
      2022-11-13
    • JavaScript数据扁平化详解
      目录什么是扁平化递归tostringreduceundercore_.flatten_.union_.difference总结什么是扁平化 数组的扁平化,就是将一个嵌套多层...
      99+
      2022-11-12
    • 详解JavaScript中扁平与树形数据的转换
      目录一、扁平转树形1、方法一2、方法二3、方法三4、方法四二、树形转扁平1、方法一2、方法二3、方法三一、扁平转树形 在 JavaScript 中,可以使用递归算法将扁平的数据转换为...
      99+
      2023-01-11
      JavaScript扁平转树形数据 JavaScript树形数据转扁平 JavaScript 扁平 树形数据
    • 如何进行JavaScript数据扁平化分析
      如何进行JavaScript数据扁平化分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。什么是扁平化数组的扁平化,就是将一个嵌套多层的数组 array (嵌套可...
      99+
      2023-06-21
    • JavaScript中数组扁平化的方法有哪些
      这篇文章将为大家详细讲解有关JavaScript中数组扁平化的方法有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。数组扁平化数组扁平化是指将一个多维数组变为一个一维数...
      99+
      2022-10-19
    • Javascript中扁平化数据结构与JSON树形结构转换详解
      目录一. 先说简单的树形结构数扁平化处理二. 再讲将扁平化数据结构转JSON树状形结构扩充一个知识点:for in 与 for of 的区别 :总结不废话,直接开干 一. 先说简单的...
      99+
      2022-11-13
    • JavaScript面试之如何实现数组拍平(扁平化)方法
      目录1 什么叫数组拍平? 2 JS标准库中的数组拍平方法 3 实现一个flat方法 3.1 如何遍历一个数组 3.2 如何判断元素是否为数组 3.3 递归 3.4 初步实现flat方...
      99+
      2022-11-12
    • JavaScript数组常用方法解析及数组扁平化
      目录前言一、常用数组操作方法push末尾追加元素pop删除数组末尾元素sort排序shift数组开头添加元素 && unshift数组开头删除元素数组合并concat...
      99+
      2022-11-13
    • JavaScript数组实现扁平化四种方法详解
      目录1. 常规递归法2. reduce方法3. 扩展运算符实现4. split和toString共同处理数组的扁平化就是将一个嵌套多层的数组 array(嵌套可以是任何层数)转换为只...
      99+
      2022-11-13
      JS数组扁平化 JS数组
    • JS实现数组扁平化的方法分享
      目录过程什么是扁平化方法一:flat方法二:递归前言 当我们遇到一个 树形结构的数据,或者 多层嵌套 的数组,如果想拿到数组项的 某一个 字段值,操作起来将会很麻烦,这个时候就需要我...
      99+
      2023-05-16
      JS实现数组扁平化 JS数组扁平化 JS数组
    • 解数组去重和数组扁平化的方法有哪些
      这篇文章主要介绍“解数组去重和数组扁平化的方法有哪些”,在日常操作中,相信很多人在解数组去重和数组扁平化的方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”解数组去重和...
      99+
      2022-10-19
    • web自动化平台开发元数据的设计方法是是什么
      这篇“web自动化平台开发元数据的设计方法是是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“web自动化平台开发元数据的...
      99+
      2023-06-04
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作