首页 > 其他分享 >【js】两个数组对象合并成一个树结构的数据

【js】两个数组对象合并成一个树结构的数据

时间:2024-04-22 09:23:32浏览次数:29  
标签:deptId 树结构 岗位 js 部门 数组 label id

 1  模板
 2  /**
 3   * 合并两个数组,将岗位信息按照部门进行分组
 4   * @param {Array} array1 岗位信息数组,每个岗位包含部门ID(deptId)、岗位ID(postId)和岗位名称(postName)
 5   * @param {Array} array2 部门信息数组,每个部门包含部门ID(id)和部门名称(label)
 6   * @returns {Array} 返回一个新数组,每个元素代表一个部门,包含部门ID、部门名称和该部门下的所有岗位(children)
 7   */
 8  mergeArrays(array1, array2) {
 9      const result = []
10      // 遍历部门信息数组,为每个部门创建一个岗位子数组
11      array2.forEach(item => {
12          // 初始化岗位子数组
13          const children = []
14          // 遍历岗位信息数组,将属于当前部门的岗位添加到岗位子数组中
15          array1.forEach(post => {
16              if (post.deptId === item.id) {
17                  children.push({
18                      deptId: post.deptId,
19                      id: post.postId,
20                      deptName: post.deptName,
21                      label: post.postName
22                  })
23              }
24          })
25          // 将部门及其岗位子数组添加到结果数组中
26          result.push({
27              id: item.id,
28              label: item.label,
29              children: children
30          })
31      })
32 
33      return result
34  }

这是一个通用的两个数组对象合并为一个树结构数组的方法,其中的参数可以根据自己的需求进行修改:以下是测试数据,可以自行设置查看返回数据:

 1  const array1 = [{
 2          deptId: 1,
 3          postId: 1,
 4          deptName: 'Department A',
 5          postName: 'Position A'
 6      },
 7      {
 8          deptId: 1,
 9          postId: 2,
10          deptName: 'Department A',
11          postName: 'Position B'
12      },
13      {
14          deptId: 2,
15          postId: 3,
16          deptName: 'Department B',
17          postName: 'Position C'
18      }
19  ]
20  const array2 = [{
21          id: 1,
22          label: 'Department A'
23      },
24      {
25          id: 2,
26          label: 'Department B'
27      }
28  ]

 

标签:deptId,树结构,岗位,js,部门,数组,label,id
From: https://www.cnblogs.com/leileig/p/18149983

相关文章

  • 30 天精通 RxJS (27):简易实作 Observable(二)
    前一篇文章我们已经完成了基本的observable以及Observer的简易实现,这篇文章我们会接续上一篇的内容实现简易的Observable类别,以及一个creationoperator和一个transformoperator。建立简易Observable类别这是我们上一篇文章写的建立observable实例的函数func......
  • 前端资源共享方案对比-笔记:iframe/JS-SDK/微前端
    vue2异步加载之前说过,vue3还是之前的方法,只是把 i18n.setLocaleMessage改为i18n.global.setLocaleMessage但是本文还是详细说一遍:为什么需要异步加载语言包主要还是缩小提代码包,没有按需加载前,语言包内容太多好几屏幕全部是,虽然从webpack-analysis看图里面占比可以忽略不计......
  • 树状数组入门
    树状数组下标记得是从1开始,本节点id通过加lowbit可以访问到父节点的id,用于点修。本节点id减去lowbit则是查看左边第一个比自己高一级的节点id,比如7会查到6,6会查到4,这样子累加此三个的值就可以得到前七个的前缀和。inttreeArr[M]={0};//startfrom1intlowbit(intx){......
  • 在React中的函数组件和类组件——附带示例的对比
    在React中,创建组件有两种主要方式:函数组件和类组件。每种方式都有自己的语法和用例,尽管随着ReactHooks的引入,它们之间的差距已经显著缩小。但选择适当的组件类型对于构建高效和可维护的React应用程序仍然非常关键。在本文中,我们将探讨函数和类组件之间的基本区别,清楚地理解它们......
  • next.js app目录 i18n国际化简单实现
    最近在用next写一个多语言的项目,找了好久没找到简单实现的教程,实践起来感觉都比较复杂,最后终于是在官方文档找到了,结合网上找到的代码demo,终于实现了,在这里简单总结一下。此教程适用于比较简单的项目实现,如果你是刚入门next,并且不想用太复杂的方式去实现一个多语言项目,那么这个教......
  • 何时使用JSX.Element vs ReactNode vs ReactElement?
    在React开发中,JSX.Element、ReactNode和ReactElement这三个类型分别代表不同级别的React组件树中的元素,它们在不同的上下文中有着各自的用途。以下是它们的区别及使用场景的概述:JSX.Element定义:JSX.Element是当你编写JSX语法时,编译器(如Babel)将这些语法转化为等效的Reac......
  • threejs - 渲染第一个3D场景 - 旋转的正方体
    1.安装threejs&使用2.创建三要素 场景scene相机camera渲染器render 3.场景newTHREE.Scene()  相机分为2种 1.透视相机2.正交相机 渲染器的使用 把canvas标签渲染到body页面document.body.appendChild(renderer.doLement); // 渲染canvasre......
  • Golang一日一库之gjson
    官网https://github.com/tidwall/gjson一简介gjson实际上是get+json的缩写,用于读取JSON串二使用1.安装gogetgithub.com/tidwall/gjson2.使用packagemainimport("fmt""github.com/tidwall/gjson")funcmain(){json:=`{"name":{......
  • 1.某道翻译js逆向sign值
    首先找到这个请求接口这个接口就是我们请求翻译的接口发现有个sign值,这就是我们需要逆向的值再看看这个接口的响应可以发现这个响应是被加密的,我们还需要去逆向解密这个被加密的响应,这篇就单纯讲一下逆向这个sign值把查看调用堆栈下断点,一步步跟栈发现......
  • 发转数组的操作
    publicclassDemo4{publicstaticvoidmain(String[]args){int[]arrays={1,2,3,4,5};//printArrary(arrays);//JDK1.5,没有下标//for(intarray:arrays){//System.out.println(array);//array代表数组的数值int[]reverse=reverse(arrays);printArrary(re......