首页 > 其他分享 >JS 将列表转成树形结构数据

JS 将列表转成树形结构数据

时间:2023-09-20 16:58:49浏览次数:44  
标签:idKey 列表 tmpMap 树形 childrenKey nodes JS parentKey

一、背景

联调发现有些后端返回List 但是前后需要转树形结构

二、实现

点击查看代码
import _, { isArray } from 'lodash'



/**
 * 将列表转成树形结构数据
 * @param nodes 列表数据
 * @param options 可选参数,{idKey, pIdKey, childrenKey}
 * @returns {[]} 树形结构数据
 */
export function transformToTree(nodes, options = null) {

  // 默认值 id parentId children 来组装 树形,可以通过 传进来的参数进行更改
  options = Object.assign({ idKey: 'id', parentKey: 'parentId', childrenKey: 'children' }, options)
  const { idKey, parentKey, childrenKey } = options
  if (!idKey || idKey === '' || !nodes) return []
  if (isArray(nodes)) {
    const r = []
    const tmpMap = []
    for (let i = 0, l = nodes.length; i < l; i++) {
      tmpMap[nodes[i][idKey]] = nodes[i]
    }
    for (let i = 0, l = nodes.length; i < l; i++) {
      if (tmpMap[nodes[i][parentKey]] && nodes[i][idKey] !== nodes[i][parentKey]) {
        if (!tmpMap[nodes[i][parentKey]][childrenKey]) { tmpMap[nodes[i][parentKey]][childrenKey] = [] }
        tmpMap[nodes[i][parentKey]][childrenKey].push(nodes[i])
      } else {
        r.push(nodes[i])
      }
    }
    return r
  } else {
    return [nodes]
  }
}

调用transformToTree()

点击查看代码
// 默认值 id parentId children 来组装 树形,可以通过 传进来的参数进行更改

// 正常调用
listGeognameCategories().then(data => {
      const list = data.content
      this.geognameCategories = transformToTree(list)
      console.log(this.geognameCategories)
    })

结果:

image

调用transformToTree()自定义父节点树形名称

点击查看代码
// 修改父节点 属性名
listSmalls().then(data => {
      this.depts = transformToTree(data, { parentKey: 'pid' })
      console.log(this.depts)
    })

image

tree.js 树形工具类

三、遇到的报错

四、参考博客

标签:idKey,列表,tmpMap,树形,childrenKey,nodes,JS,parentKey
From: https://www.cnblogs.com/lcaiqin/p/17717743.html

相关文章

  • Json学习
    Json入门参考资料笔记教程视频教程JSON定义JSON(JavaScriptObjectNotation,JS对象标记)是一种轻量级的数据交换格式,目前使用特别广泛。采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得JSON成为理想的数据交换语言。易于人阅读和编......
  • js小知识
    #js入门学习参考视频:https://www.bilibili.com/video/BV1JJ41177di/参考资料:https://www.cnblogs.com/gh110/p/15153662.html扩展:-数组的for-each-```jsvararr=[15,4,3,43,21,43,2,1,3,5];arr.forEach((element)=>{console.log(element......
  • struts2.1.8.1+jquery1.4.2返回json数据
    1、引入包(本文中的包全部引自struts-2.1.8.1\lib):struts2-json-plugin-2.1.8.1.jarjson-lib-2.1.jarcommons-collections-3.2.jarcommons-beanutils-1.7.0.jarcommons-lang-2.3.jarcommons-logging-1.0.4.jarezmorph-1.0.3.jar这7个包是返回json形式的数据必须的。因为jso......
  • js实现选中某个区域展示引导信息(插件库)
    在公司做项目,经常存在类似「引导」的功能,引导用户该先点哪后点哪,或者做一些首次使用的提示找到了个比较好用且轻量化的js组件intro.js ,有常规的灰色遮罩高亮特定dom提示的(hello-world),也有用户点到指定标签/位置上的提示(hints)感觉还是不错的,并且,有免费版本......
  • 框架分析(3)-Vue.js
    (框架分析(3)-Vue.js)专栏介绍link主要对目前市面上常见的框架进行分析和总结,希望有兴趣的小伙伴们可以看一下,会持续更新的。希望各位可以监督我,我们一起学习进步。Vue.jsVue.js是一种用于构建用户界面的渐进式JavaScript框架。它是一个轻量级的框架,通过将视图层和状态层进行绑......
  • Vue js 3.0下 箭头函数的使用
    ......
  • 使用pdf.js展示pdf
    一、下载pdf.js文件https://mozilla.github.io/pdf.js/getting_started/web里边有一个viewer.html文件此文件为展示pdf的文件直接打开此文件不能展示需要本地启动一个服务可以使用http-server-c-1提示错误的全局安装一下  npminstallhttp-server-g现在就可以正......
  • JS实现table动态生成过程中,移动行checkbox值丢失问题的解决
     最近在做项目过程中遇到这样一个疑问:(查看实例代码TEST1)DHTML中table对象的moveRow方法实现对table中表格行移动到新位置。例子TEST1中行2包含文本框、复选框、下拉框,当分别键入值后对行2执行上移操作后,我们发现,文本框与下拉框的值不会丢失,但复选框值会丢失。而如果在行2中键......
  • JS应用(很全了)
    如果你找的javascript的东西的话,建议你ctrl+F 直接在这个页上找,因为这里80%有你要找的,但是要让你挨着看的话,你就准备看完就去配眼镜!!事件源对象event.srcElement.tagNameevent.srcElement.type捕获释放event.srcElement.setCapture(); event.srcElement.releaseCaptur......
  • 软件测试|Python如何将列表从大到小排序
    简介在编程中,对列表进行排序是一个常见的操作,有时候我们需要将列表按照从大到小的顺序进行排列。Python提供了多种方法来实现这一目标。在本文中,我们将深入探讨几种将列表从大到小排序的方法,帮助您根据不同情况选择最合适的方式。使用sorted()函数Python的sorted()函数可以接收一......