首页 > 编程语言 >Javascript中扁平化数据结构与JSON树形结构转换详解

Javascript中扁平化数据结构与JSON树形结构转换详解

时间:2023-04-06 09:02:49浏览次数:55  
标签:console 扁平化 parent title Javascript item JSON id log

Javascript中扁平化数据结构与JSON树形结构转换详解
原文链接:https://www.jb51.net/article/247525.htm

+
目录

不废话,直接开干

一. 先说简单的树形结构数扁平化处理

上思想: 思想:采用递归,每个对象都有childern,只要有children属性提取出来将其放在空数组中 然后将对象的其他属性解构出来,最后将数组合并

上代码:

?
12345678910111213141516171819202122232425262728//已知JSON树状形结构的数据datalet data = [             {id:1,title:'标题1',parent_id:0,},             {id:2,title:'标题2',parent_id:0,              children:[                 {id:3,title:'标题2-1',parent_id:2,                  children:[                    {id:4,title:'标题3-1',parent_id:3,                     children:[                        {id:5,title:'标题4-1',parent_id:4}                      ]}                  ]},                {id:6,title:'标题2-2',parent_id:2}              ]            }           ],               function flat(data){            return data.reduce((pre,cur)=>{                // console.log(cur);                //此处将对象的children属性和值都解构在空数组中,将对象的其他属性和值都解构在i里面。                const {children=[],...i}=cur;   // 注意 ...i 只能写在解构赋值的末尾,否则报错                // console.log(i);                // // console.log(children);                return pre.concat([{...i}],flat(children))  //利用递归回调,数组合并,注意此处 {...i}是解构            },[]);        }   console.log(flat(data));

这里用到了 es6解构赋值 和不常用的 Array.reduce,文章讲的不错,可以去看看。

二. 再讲将扁平化数据结构转JSON树状形结构

思想都在步骤里了。

老规矩上代码:

?
12345678910111213141516171819202122232425262728293031323334353637383940  //已知扁平化数据Arrlet Arr = [            {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},          ];      const result = []     function fn(list){          const remap = list.reduce((pre,cur)=>{  //###第一步:将数组转换成键值对的形式(键是id值,值是对象)                // console.log(cur);               pre[cur.id]=cur                // console.log(pre);               return pre           },{})                //console.log(remap);               //###第二步,循环遍历数组,判断是不是(树状结构最外层,祖宗层数据)第一层的数据(本处就是parent_id等不等于0)            for(let item of list){  //用普通的for循环也行,但是用for in 不行,只能获取数组的元素下标,或者对象的键                console.log(item);                if(item.parent_id===0){                    result.push(item)                    continue                }                // console.log(item.parent_id);                // console.log(remap[item.parent_id]); //注意 obj[key] 就代表是对象的值value                if(item.parent_id in remap) {   //换成else也可,目的将不是第一层的数据(parent_id不等于0)挑出来,并赋予一个children属性                    const parent = remap[item.parent_id];                    parent.children = parent.children || [];                     // console.log(parent);                    parent.children.push(item);                    //console.log(parent);                }            }            // console.log(result);            return result        }      console.log(fn(Arr));

扩充一个知识点:for in 与 for of 的区别 :

for-in结构对 Array(数组)和Object(对象)都可以使用,但只能拿到数组元素下标或者对象的键;

而for-of结构在对Object(对象)使用时会报错,在数组是可以拿到数组元素。

?
12345678910111213141516171819202122const arr = [2,3,4]const obj = {    a:2,    b:3,    c:4}, for (let item in arr){    console.log(item);  // 0 , 1 , 2} for (let item of arr){    console.log(item);  // 2 , 3 , 4} for (let item in obj){    console.log(item)  // a ,b ,c} for (let item of obj ){    console.log(item)  // Uncaught TypeError: arr is not iterable }

总结

到此这篇关于Javascript中扁平化数据结构与JSON树形结构转换的文章就介绍到这了,更多相关js扁平化与JSON树形结构转换内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

标签:console,扁平化,parent,title,Javascript,item,JSON,id,log
From: https://www.cnblogs.com/sunny3158/p/17291554.html

相关文章

  • 第十九篇 JSON 、XML、E4X
    bycaixin深圳JSON定义JSON:JavaScriptObjectNotation【JavaScript对象表示法】JSON(JavaScriptObjectNotation,JS对象标记)是一种轻量级的数据交换格式,目前使用特别广泛。JSON是存储和交换文本信息的语法。类似XML。JSON采用完全独立于任何程序语言的文本格式,......
  • 方法定义,Date和JSON对象,及JavaScript式面向对象编程
    一.方法1.方法的定义 方法就是把函数放在对象里面,对象有两个东西:属性和方法通过对象名.方法名()使用a.第一种方法定义<script>varsetFun={name:"maming",birth:2002,//方法:被包含在对象之中age:function(){varnow=ne......
  • JavaScript基础知识之——Location 对象详解
    属性描述location.hash设置或取得URL中的锚location.host设置或取得URL中主机(包括端口号)location.hostname设置或取得URL中的主机名location.href设置或取得完整URL(页面重定向应用)location.pathname设置或取得URL中的路径location.port设置或取得URL中的端口号location.......
  • JavaScript之函数,变量作用域,let(局部变量),const(常量)
    一.函数方法:面向对象特有的,它是对象的一部分,一个对象包含属性和方法函数:它的功能类似于方法,但是函数的写法是直接与类文件一体的,方法是包含在类文件中的,函数和类文件是一级目录JavaScript中的函数是包含在函数的定义方式一般用 function 来声明所有函数,他不同于其它高级语......
  • 关于python中使用json.loads()将字符串数据转换成字典
    在json模块中,我们可以经常会用到load()与loads(),其中两者的区别如下json.load()从json文件中读取数据转抱为dict类型json.loads()将str类型的数据转换为dict类型这里笔者主要说明json.loads()的用法,将字符串转转换成字典,如下str2dict.py脚本内容:importjsonJsonStr='''{......
  • 关于python中使用json.load()从json文件中读取数据转换成字典
    在json模块中,我们可以经常会用到load()与loads(),其中两者的区别如下json.load()从json文件中读取数据转抱为dict类型json.loads()将str类型的数据转换为dict类型这里笔者主要说明json.load()的用法,举例说明,如下有一json文件,ip-ranges.json,内容如下:这里我们将使用json.load(......
  • JavaScript中数组元素删除的七大方法汇总
    原文链接:https://blog.csdn.net/u010323023/article/details/52700770 在JavaScript中,除了Object之外,Array类型恐怕就是最常用的类型了。与其他语言的数组有着很大的区别,JavaScript中的Array非常灵活。今天我就来总结了一下JavaScript中Array删除的方法。大致的分类可以分为如下......
  • Javascript模块化编程(三):require.js的用法
    这个系列的第一部分和第二部分,介绍了Javascript模块原型和理论概念,今天介绍如何将它们用于实战。我采用的是一个非常流行的库require.js。一、为什么要用require.js?最早的时候,所有Javascript代码都写在一个文件里面,只要加载这一个文件就够了。后来,代码越来越多,一个文件不够了,必须分......
  • Python爬虫 execjs执行js报错json.decoder.JSONDecodeError: Expecting value: line 1
    fun=re.search(r'(__=\([\S\s]*?;)<',r_text).group(1)fun=fun+'functionget(){returnJSON.stringify(__.data)}'ctx=execjs.compile(fun)rdata=(ctx.eval('get()'))报错json.decoder.JSONDecodeError:Expectingvalue:line1col......
  • JavaScript快速入门(二)
    文件中引入JavaScript嵌入到HTML文件中在body或者head中添加script标签<script>varage=10;console.log(age);</script>引入js文件创建一个js文件varage=20;console.log(age);在html文件中src引入改文件<body><scriptsrc="./age.js"></scr......