首页 > 其他分享 >js将数据转为菜单,一个for?

js将数据转为菜单,一个for?

时间:2024-01-16 14:58:46浏览次数:25  
标签:lable 菜单 obj pid element children js 转为 id

let data = [


    { id: '02', lable: '产品leader', pid: '01' },

    { id: '03', lable: 'UIleader', pid: '01' },
    { id: '07', lable: '产品经理', pid: '02' },

    { id: '04', lable: '技术leader', pid: '01' },
    { id: '21', lable: '技术leader2', pid: '20' },
    { id: '05', lable: '测试leader', pid: '01' },

    { id: '06', lable: '运维leader', pid: '01' },


    { id: '08', lable: '产品经理', pid: '02' },

    { id: '09', lable: 'UI设计师', pid: '03' },

    { id: '10', lable: '前端工程师', pid: '04' },

    { id: '11', lable: '后端工程师', pid: '04' },

    { id: '12', lable: '后端工程师', pid: '04' },

    { id: '13', lable: '测试工程师', pid: '05' },

    { id: '14', lable: '测试工程师', pid: '05' },

    { id: '15', lable: '运维工程师', pid: '06' },

    { id: '01', lable: '项目经理', pid: '' },
    { id: '20', lable: '项目经理22', pid: '' },

]
data.sort(_ => Math.random() - 0.5) //乱序

/**
* 利用浅拷贝
*/ function toData2(arr) { let obj = {}, result = []; for (let index = 0; index < arr.length; index++) { const element = arr[index]; if (!obj[element.id]) { obj[element.id] = element obj[element.id].children = [] } if (element.pid && !obj[element.pid]) { obj[element.pid] = { children: [] } } if (!element.pid) { element.children = obj[element.id].children result.push(element) } else { obj[element.pid].children.push(element) } } return result } function toData3(arr) { let obj = {}, result = []; arr.forEach(element => { if (!obj[element.id]) { obj[element.id] = element obj[element.id].children = [] } if (element.pid && !obj[element.pid]) { obj[element.pid] = { children: [] } } if (!element.pid) { element.children = obj[element.id].children result.push(element) } else { obj[element.pid].children.push(element) } }) return result } console.time('toData2') console.log(JSON.stringify(toData2(data))) console.timeEnd('toData2') console.time('toData3') console.log(JSON.stringify(toData3(data))) console.timeEnd('toData3')

 

标签:lable,菜单,obj,pid,element,children,js,转为,id
From: https://www.cnblogs.com/qiyc/p/17967627

相关文章

  • js爬取网页table数据
    result=""for(vari=2;i<=100;i++){varxpath='//*[@id="app"]/div/div[3]/div[1]/div[3]/div/div[2]/div/div[1]/div[1]/div/div/div/div/div/div/div[2]/table/tbody/tr['+i+']/td[4]/div[1]/span[1]/span/a......
  • js自动缩放页面自适应屏幕分辨率
    1.简单版:s=window.screen.width/1920;document.body.style.zoom=s;2. 当开发前端页面在分辨率1920的情况下,需要切换到小屏,有种方法是可以对屏幕比例进行缩放,通过css3属性transform可以自适应屏幕分辨率大小vars;functionresize(){s=window.screen.width......
  • 《nodejs安装篇》nodejs卸载及重装
    参考链接:https://blog.csdn.net/strawberry_x/article/details/113648770?spm=1001.2014.3001.5501卸载首先在控制面板的程序中卸载nodejs然后删除这两个文件夹然后检查是否有一下文件夹,若有,就删除c://user/xxx/node_modelsc://ProgramFiels/nodejsc://user/xxx/AppData/......
  • 《nodejs安装篇》nodejs安装windows详细版
    参考链接:https://www.cnblogs.com/feiye512/p/12539306.html安装1、下载安装包下载地址:https://nodejs.org/zh-cn/download/根据自己电脑系统及位数选择,我这里选择windows64位.msi格式安装包.msi和.zip格式区别:1、.msi是Windowsinstaller开发出来的程序安装文件,它可以让你......
  • 《nodejs新建篇》nvm安装
    参考链接:https://www.cnblogs.com/jing-tian/p/11225123.html介绍nvm是node.js的版本管理工具,可以运行在多种操作系统上。nvmforwindows是使用go语言编写的软件。我电脑使用的是Windows操作系统,所以我要记录下在此操作系统上nvm的安装和使用。下载nvm-windows最新下载......
  • 《nodejs安装篇》nodejs安装
    安装参考链接:https://www.runoob.com/nodejs/nodejs-install-setup.html本安装教程以Node.jsv4.4.3LTS(长期支持版本)版本为例。Node.js安装包及源码下载地址为:https://nodejs.org/zh-cn/download/。你可以根据不同平台系统选择你需要的Node.js安装包。Node.js历史版......
  • 十进制转为十六进制
    #include<stdio.h>#include<stack>intmain(){std::stack<char>s;intnum,mod;printf("输入十进制数:\n");scanf("%d",&num);printf("num:%d\n",num);while(num/16!=0){mod=num%1......
  • 《nodejs概念篇》ES6
    ES6简介参考链接:https://www.cnblogs.com/itzlg/p/11854386.htmlECMAScript6.0(简称ES6),是JavaScript语言的下一代标准。它的目标是使得JavaScript语言可以用来编写复杂的大型应用程序,成为企业级开发语言。es6入门文档:http://caibaojian.com/es6/ES6的新特性参考链接:https://w......
  • 解决 Idea HttpClient 无法读取 http-client.env.json 配置的问题
    前言byd就我遇到了这种情况是吧,百度搜的全是nm复制粘贴的垃圾文章步骤创建一个.http文件,使用idea工具栏创建一个env.json,内容无所谓按理说现在应该就能正常使用了,但是如果到这一步还没法读取到这个环境的话,继续向下看右键env.json看看有没有这个,如果没......
  • easyui datebox 周选择器 结合moment.js获取一周的时间范围
    项目里用的easyui,用weekpicker的话需要与easyui代码有冲突会导致页面报错,所以直接改造一下easyui的datebox实现这一功能1<inputtype="text"class="easyui-datebox"data-options="formatter:myformatter,parser:myparser,onSelect:onSelect"id="S_Week">1......