js树形结构的相关方法

news/2024/12/28 9:38:05/

 数组转树结构

 /*** @Event 数组转树结构* @description: pid: parentId* @author: mhf* @time: 2023-11-01 16:06:18**/
export function arrayToTree(list,callback = () => {},props = { id: 'id', pid: 'pid', children: 'children' }
) {function sortArr(a, b) {return a.orderNum - b.orderNum;}list.sort(sortArr);const tree = [];const map = {};const listLength = list.length;for (let i = 0; i < listLength; i++) {const node = list[i];const nodeId = node[props.id];map[nodeId] = node;callback(node);}for (let i = 0; i < listLength; i++) {const node = list[i];const nodePid = node[props.pid];const parentNode = map[nodePid];if (parentNode) {parentNode[props.children] = parentNode[props.children] || [];parentNode[props.children].push(node);} else {tree.push(node);}}return tree;
}

 知道树的某一个对象的id,想要获取此id对应的整个对象

 findItemById(id, data, tagId="id", tagChildren="children") {for (let i = 0; i < data.length; i++) {if (data[i][tagId] === id) {return data[i]} else if (data[i][tagChildren]) {const result = this.findItemById(id, data[i][tagChildren]);if (result) {return result;}}}return null;},this.findItemById(10, this.treeData)

知道树的某一个对象的id,获取该对象的父节点的id

    findParentIdById(id, data, parentIds = [], tagId="id", tagChildren="children") {for (let i = 0; i < data.length; i++) {if (data[i][tagId] === id) {return parentIds} else if (data[i][tagChildren]) {const result = this.findParentIdById(id, data[i][tagChildren], [...parentIds, data[i][tagId]])if (result) {return result}}}return null},this.findParentIdById(10, this.treeData)

知道id获取id所在的对象在整个树形数组中的位置

   findIndexById(data, id, parentIndex) {for (var i = 0; i < data.length; i++) {var node = data[i];if (node.id === id) {return parentIndex ? parentIndex.concat(i) : [i];}if (node.children) {var index = this.findIndexById(node.children,id,parentIndex ? parentIndex.concat(i, "children") : [i, "children"]);if (index) {return index;}}}return null;},

 


http://www.ppmy.cn/news/1216739.html

相关文章

8. 深度学习——NLP

机器学习面试题汇总与解析——NLP 本章讲解知识点 什么是 NLP循环神经网络(RNN)RNN 变体Attention 机制RNN 反向传播推导LSTM 与 GRUTransformerBertGPT分词算法分类CBOW 模型与 Skip-Gram 模型本专栏适合于Python已经入门的学生或人士,有一定的编程基础。本专栏适合于算法…

C++什么时候使用指针(函数传参时)

在C中&#xff0c;使用指针作为函数参数可以在以下几种情况下提高效率&#xff1a; 需要修改函数外部的变量&#xff1a;当函数需要修改传递给它的变量的值时&#xff0c;使用指针比传值更高效。因为通过指针传递变量的地址&#xff0c;函数可以直接修改变量的值&#xff0c;而…

【2021集创赛】Arm杯一等奖作品—基于 Cortex-M3 内核 SOC 的动目标检测与跟踪系统

本作品介绍参与极术社区的有奖征集|秀出你的集创赛作品风采,免费电子产品等你拿~ 团队介绍 参赛单位&#xff1a;北京理工大学 队伍名称&#xff1a;飞虎队 指导老师&#xff1a;李彬 参赛杯赛&#xff1a;Arm杯 参赛人员&#xff1a;余裕鑫 胡涵谦 刘鹏昀 获奖情况&#xff1…

Python机器学习基础(三)---数据预处理

一.数据预处理作用 数据预处理会将选定的数据转换为我们可以使用的形式或可以提供给ML算法的形式&#xff0c;以使其符合机器学习算法的期望。 二.数据处理的常用方法 1.规范化 数据规范化是使属性数据按比例缩放&#xff0c;这样就将原来的数值映射到一个新的特定区域中&#…

轻量封装WebGPU渲染系统示例<28>- MRT纹理(源码)

当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/feature/rendering/src/voxgpu/sample/MRT.ts 当前示例运行效果: 此示例基于此渲染系统实现&#xff0c;当前示例TypeScript源码如下: const colorRTTTex { diffuse: { uuid: "colorRTT", rtt…

SAP-SD-外向交货单交期不符

创建外向交货单时报错 销售订单的交期还没到&#xff0c;所以不能做外向交货单 但是货已经加工完成&#xff0c;现在想交货 查看销售订单的交货期为12月15日&#xff08;va03&#xff09; 在VL01N里修改“选择日期为12月15日”就可以了。

DevOps系列---【jenkinsfile使用sshpass发送到另一台服务器】

1.首先在宿主机安装sshpass 2.把物理机的sshpass复制到容器中 which sshpass cp $(which sshpass) /usr/local/app/ docker cp sshpass 容器id:/usr/local/bin/sshpass 3.在jenkinsfile中添加 #在stages中添加stage stage(部署TEST服务){steps{sh "sshpass -p root1234 sc…

【移远QuecPython】EC800M物联网开发板的音乐播放(PWM蜂鸣器播放生日快乐歌,Sound模块播放音频)

【移远QuecPython】EC800M物联网开发板的音乐播放&#xff08;PWM蜂鸣器播放生日快乐歌&#xff0c;Sound模块播放音频&#xff09; 效果&#xff1a; 【移远QuecPython】EC800M开发板外置功放重金属和PWM音调&#xff08;BUG调试记录&#xff09; 文章目录 PWM蜂鸣器播放播放…