摘要:前言在工作中我们往往可能会遇到无限级别的分类等等的需求,往往后端返回的数据结构可能不是我们想要的数据结构,所以我们来看怎么进行处理扁平数据结构转换为树型结构解忧杂货铺解忧杂货铺解忧杂货铺解忧杂货铺解忧杂货铺解忧杂货铺
前言在工作中我们往往可能会遇到无限级别的分类等等的需求,往往后端返回的数据结构可能不是我们想要的数据结构,所以我们来看怎么进行处理
扁平数据结构转换为JSON树型结构[
{id: 1, title: "解忧杂货铺1", parent_id: 0},
{id: 2, title: "解忧杂货铺2", parent_id: 0},
{id: 3, title: "解忧杂货铺2-1", parent_id: 2},
{id: 4, title: "解忧杂货铺3-1", parent_id: 3},
{id: 5, title: "解忧杂货铺4-1", parent_id: 4},
{id: 6, title: "解忧杂货铺2-2", parent_id: 2},
]
代码
function fn(data, pid) {
let result = [], temp;
for (let i = 0; i < data.length; i++) {
if (data[i].pid === pid) {
let obj = {"title": data[i].title,"pid": data[i].pid,"id": data[i].id};
temp = fn(data, data[i].id);
if (temp.length > 0) {
obj.children = temp;
}
result.push(obj);
}
}
return result;
}
let returnTree = fn(flatArr,0);
console.log(returnTree);
输出结果
[
{id: 1, title: "解忧杂货铺1", pid: 0},
{
id: 2, title: "解忧杂货铺2", pid: 0, children: [
{id: 6, title: "解忧杂货铺4-2", pid: 2},
{
id: 3, title: "解忧杂货铺2-1", pid: 2, children: [
{
id: 4, title: "解忧杂货铺3-1", pid: 3, children: [
{id: 5, title: "解忧杂货铺4-1", pid: 4},
]
},
]
},
]
}
];
JSON树型结构转换扁平结构
我们看到上面已经有转换好了的JSON树形结构,那么我们如何把上面的结构反推回来呢
代码function flatten(data) {
return data.reduce((arr, {id, title, pid, children = []}) =>
arr.concat([{id, title, pid}], flatten(children)), []);
}
let flatArr = flatten(JsonTree);
console.log(flatArr)
输出结果
[
{id: 1, title: "解忧杂货铺1", pid: 0},
{id: 2, title: "解忧杂货铺2", pid: 0},
{id: 3, title: "解忧杂货铺2-1", pid: 2},
{id: 4, title: "解忧杂货铺3-1", pid: 3},
{id: 5, title: "解忧杂货铺4-1", pid: 4},
{id: 6, title: "解忧杂货铺4-2", pid: 2},
]
结语
利用上面的代码,我们就可以轻松的转换这两种数据结构~ 如果大佬们有更好的方法,希望可以发出来一起探讨~
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/6804.html
摘要:与持久化工程师花了年时间打造,与同期出现。有持久化数据结构,如等,并发安全。总结篇幅有限,时间也比较晚了,关于前端数据的扁平化与持久化处理先讲这么多了,有兴趣的同学可以关注下,后面有时间会多整理分享。 (PS: 时间就像海绵里的水,挤到没法挤,只能挤挤睡眠时间了~ 知识点还是需要整理的,付出总会有收获,tired but fulfilled~) 前言 最近业务开发,从零搭建网页生成器,...
摘要:前端芝士树如何完成数组的扁平化问题描述输入一个嵌套型数组输出扁平化后的数组如果只是两层的数据如果是多层嵌套的数组 【前端芝士树】如何完成数组的扁平化 Array flattern? 问题描述 输入:一个嵌套型数组输出:扁平化后的数组 let array = [1, [2, 3, 4]]; let arrayDeeper = [1, [2, [3, 4]]]; 如果只是两层的数据 fun...
摘要:通过自定义的查询加载和大多数情况下,你需要按层级排序祖先集合可以被预加载视图模板中面包屑将祖先的全部取出后转换为数组,在用拼接为字符串输出。 原文链接:http://www.pilishen.com/posts...; 欢迎作客我们的php&Laravel学习群:109256050 laravel-nestedset是一个关系型数据库遍历树的larvel4-5的插件包 目录: Nes...
阅读 3669·2021-09-22 15:49
阅读 3272·2021-09-08 09:35
阅读 1407·2019-08-30 15:55
阅读 2262·2019-08-30 15:44
阅读 680·2019-08-29 16:59
阅读 1574·2019-08-29 16:16
阅读 451·2019-08-28 18:06
阅读 875·2019-08-27 10:55