js将多维数组格式化展开成树状结构

【Js】多层级对象数组转为树结构 var arr = [ { id: 1, name: "石家庄市", parentId: 2, }, { id: 2, name: "河北省", parentId: 0, },{ id: 3, 阅读详情

js将多维数组格式化展开成树状结构

用js实现将二维数组格式化转换成树状结构。

eg:待转数组:
var array1 = [
    ["a", "aa", "aaa", "aaaa"],
    ["b", "bb", "bbb"],
    ["a", "ab", "aba"],
    ["a", "aa", "aab"]
]

目标数组:
[{
    "name" : "a",
    "child" : [
        {
            "name" : "aa",
            "child" : [
                {
                    "name" : "aaa",
                    "child" : [
                        {
                            "name" : "aaaa",
                            "child" : []
                        }
                    ]
                },
                {
                    "name" : "aab",
                    "child" : []
                }
            ]
        },
        {
            "name" : "ab",
            "child" : [
                {
                    "name": "aba",
                    "child" : []
                }
            ]
        }
    ]
},
{
    "name": "b",
    "child" : [
        {
            "name" : "bb",
            "child" : [
                {
                    "name" : "bbb",
                    "child" : []
                }
            ]
        }
    ]
}]

上代码:
function toTree(arr) {
	const obj = {};
	const res = [];
	for (let i = 0; i < arr.length; i++) {
	    for (let j = 0; j < arr[i].length; j++) {
	        const item = arr[i][j];
	        if (!obj[item]) {
	            obj[item] = {
	                name: item,
	                child: [],
	            };
	        }
	        if (j > 0) {
	            const parent = obj[arr[i][j - 1]];
	            if (parent) {
	                if (parent.child.indexOf(obj[item]) < 0) {
	                    parent.child.push(obj[item]);
	                }
	            }
	        } else {
	            if (res.indexOf(obj[item]) < 0) {
	                res.push(obj[item]);
	            }
	        }
	    }
	}
	return res;
}


飞书API自动化操作指南:从身份认证到多维表格数据同步实战 API(应用程序编程接口)是现代软件系统间通信和数据交换的核心技术,它定义了不同组件之间交互的规范。其工作原理基于客户端-服务器模型,通过预定义的请求和响应格式实现功能调用。在技术价值层面,API实现了系统的解耦和功能复用,极大提升了开发效率和系统可扩展性。在应用场景上,API广泛应用于数据集成、自动化流程构建和第三方服务对接等领域。本文聚焦于飞书开放平台API,深入解析其身份认证机制和资源模型,特别是针对多维表格(Bitable)的数据操作。通过实战案例,演示如何利用Python和requests库构建自 阅读详情

相关推荐

2026华为OD机试(JavaScript)真题【E卷+A卷+B卷+C卷+D卷】目录+在线OJ

华为OD机试真题题库【E卷+A卷+B卷+C卷+D卷】目录,JavaScript实现。

MISAYAONE的博客 8万+

JavaScript中将数组转化成树的几种方法

后端接口返回的数据一般是平铺的数组结构,而不会是树形结构,例如下面的平铺数组结构: data = [ {id:"01", name: "张大大", pid:"", job: "项目经理"}, {id:"02", name: "小亮", pid:"01", job: "产品leader"}, {id:"03", name: "小美", pid:"01", job: "UIleader"}, {id:"04", name: "老马", pid:"01", job: "技术leader"},

cmhahaha的博客 3248

华为OD机试 新系统 双机位C卷 往年真题 机考题库(持续收录中)以及算法考点详解

每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天优快云在线答疑。

学Java,找哪吒 7万+

js中数组常用的方法总结,包括ES6

1.push() 后增 push()方法可以向数组后添加一个新的元素,并返回新数组的长度。 末尾添加,返回长度,改变原数组 var a = [1,2,3] var b = a.push(4) console.log(a) // [1,2,3,4] console.log(b) // 4 2.unshift() 前增 unshift()可以向数组前添加一个或多个元素,并返回新的长...

挥别了青春的博客 1万+

华为OD机试 新系统 双机位C卷 真题题库目录|机考题库 + 算法考点详解

本文整理华为OD机试(机考) 新系统真题题库,提供高频考点精析与详细题目内容,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解 和 在线OJ做题练习。华为OD机试新系统真题题库。

qq_45776114的博客 10万+

2026华为OD机试(Python)真题【E卷+A卷+B卷+C卷+D卷】目录+在线OJ

华为OD机试真题题库【E卷+A卷+B卷+C卷+D卷】目录,Python实现。

MISAYAONE的博客 29万+

JS 数组转树状结构

JS 数组转树状结构 需求: 将如下数组转成树状结构 // 需转化数组示例 data = [ { id: '01', lable: '项目经理', pid: '' }, { id: '02', lable: '产品leader', pid: '01' }, { id: '03', lable: 'UIleader', pid: '01' }, { id: '04', lable: '技术leader', pid: '01' }, { id: '05', lable: '

m0_59128154的博客 5357

2026华为OD机试(C语言)真题【E卷+A卷+B卷+C卷+D卷】目录+在线OJ

华为OD机试真题题库【E卷+A卷+B卷+C卷+D卷】目录,C语言实现。

MISAYAONE的博客 11万+

js实现数组转树形数据

题目要求: 将如下数组转化成树形结构: const nodes = [ { id: 3, name: '节点C', parentId: 1 }, { id: 6, name: '节点F', parentId: 3 }, { id: 0, name: 'root', parentId: null }, { id: 1, name: '节点A', parentId: 0 }, { id: 8, name: '节点H', parentId: 4 }, { id: 4, name: '

丁哒哒的博客 9477

2026华为OD机试(C++)真题【E卷+A卷+B卷+C卷+D卷】目录+在线OJ

华为OD机试真题题库【E卷+A卷+B卷+C卷+D卷】目录,C++实现。

MISAYAONE的博客 20万+

2026华为OD机试(JAVA&Go)真题【E卷+A卷+B卷+C卷+D卷】目录+在线OJ

华为OD机试真题题库【E卷+A卷+B卷+C卷+D卷】目录,Java实现。

MISAYAONE的博客 34万+

将一维数组转换成树形结构数组方法总结

我们在开发中经常会处理数组,特别是后端传给我们的扁平化数组,然后将它处理为多维结构的数组 将扁平化数组转换成树形结构数组的n中方法 原始数据 var arr = [ { id: 1, pid: 0, text: '一级1' }, { id: 2, pid: 0, text: '一级2' }, { id: 3, pid: 1, text: '二级1-1' }, { id: 4, pid: 1, text: '二级1-2' } { id: 5, pid: 2, text: '二级2-1'.

qwguo 2601

【信息科学与工程学】【数据科学】数据科学领域 第六篇 算法设计 01

算法设计

weixin_49199313的博客 1501

JavaScript中的console对象

平常使用浏览器的开发者工具时仅用到了console.log(),今天在看一些资料时想到了看一看console对象的属性和方法,然后发现console中还有很多方便我们调试的方法;下边简要介绍。console.clear()清空控制台,只是显示上的清空,并不销毁之前控制台中创建的对象;清空后饭后“Console was cleared”.console.assert()该方法用于判断断言是否为真,如果

落枫秋歌 929

【信息科学与工程学】【安全领域】第三十五篇 网络安全算法表02

​分级处理​:实时增量 + 离线全量 + 自动校验三线并行​最终一致优先​:强同步仅用于支付等核心场景​双向容错​:Redis侧:读CK兜底(CK侧:自动屏蔽校验失败分区​业务适配​:graph LR高实时场景 --> Redis写+双重读分析场景 --> 放宽CK同步延迟报表场景 --> T+1校准保障该方案已在京东、美团等千亿级数据平台验证,支撑双11级流量下Redis与ClickHouse的数据协同。

weixin_49199313的博客 1341

【信息科学与工程学】计算机科学与自动化——第十八篇 存储系统设计 10 存储器/存储软件/存储芯片/存储盘/存储系统/存储网络01

③ MTJ电阻 → 界面:TMR=(R_AP-R_P)/R_P = 2P₁P₂/(1-P₁P₂) (Julliere模型);③ 访问延迟模型 → 统计:平均访问延迟 = p_hot * t_dram + (1-p_hot) * t_nvm + t_migration_overhead;:① 储能电容计算 → 数学物理:所需能量 E = P * t_backup,电容 C = 2E / (V_start² - V_end²);:① B-tree平衡 → 代数:树高 h = log_m(N),m为扇出;

weixin_49199313的博客 263

PaddleNLP 中 BART 模型预训练权重与源码实现全解析:从模型汇总表到实战调用

BART(Bidirectional and Auto-Regressive Transformer)是一种基于 Transformer 的序列到序列(Seq2Seq)去噪自编码器模型,广泛应用于文本摘要、机器翻译、生成式问答等任务。本文以 PaddleNLP 仓库中的 [BART 模型汇总文档](https://link.gitcode.com/i/03d859c5d61bf7a2df9f59b

gitblog_00315的博客 142

三、分区配置

rk3566/rk3568 修改分区

暮云星影的博客 514

RAG 入门实战:使用 LangChain 完成网页知识库检索与智能问答

本文完整实现从网页知识加载到模型回答的 RAG 流程:使用 Axios、Cheerio 与 LangChain Loader 提取正文,通过递归切分器生成 Chunk,再由 `OpenAIEmbeddings`、`MemoryVectorStore` 和 Retriever 完成向量化与相似度检索。最后将 Top K 文档拼接为上下文,调用 `ChatOpenAI` 生成答案。文章逐项解释核心 API、余弦相似度和数据流,帮助读者理解 Document、向量库与增强生成之间的关系。

meilindehuzi_a的博客 460

LangChain4j-针对性操作Function-call+系统预设角色

如果我们想要对一些敏感信息进行针对化的操作,不仅仅是接口大模型去进行回复。比如我们现在数据库里面有一些菜品,那么用户提问,店里有多少套餐,那么云端大模型肯定是不知道的,我们希望捕获这些关键字然后进行自己的业务查询或者处理,这个时候就可以使用function-call。

DDDDDouble的博客 454

STM32F103开发实战:如何用CubeMX+CLion调整Flash起始地址(附完整CMake配置)

本文详细介绍了在STM32F103开发中如何使用CubeMX和CLion工具链调整Flash起始地址,包括链接脚本修改、系统文件配置和CMake工程适配。通过实战步骤和完整配置示例,帮助开发者实现固件双备份、OTA升级等高级功能,提升嵌入式开发效率。

5b6n7m8的博客 209
上一篇: 在vue template模板{{xxx}}中的数据进行格式化处理
下一篇: javascript ES6制作简单日历工具
Boriska1996
博客等级 码龄7年 22粉丝 77原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值