个人理解

数据扁平化:将嵌套多层的数据转换成嵌套一层的数据;
数据反扁平化:将一层的数据转换成类似树结构的数据;

话不多说,直接上代码:

数据扁平化

方法一: 利用原型的isPrototypeOf()方法,用来检测一个对象是否存在于另一个对象的原型链中,如果存在就返回 true,否则就返回false;

let arr = [1,2,[3,4,5,[6,7,8,9]]]
let newArr = []
function fn(arr) {arr.forEach(item => {Array.prototype.isPrototypeOf(item) ? fn(item) : newArr.push(item)})return newArr
}
console.log(fn(arr))
// 运行结果: [1,2,3,4,5,6,7,8,9]

方法二: 使用Array.prototype.flat()方法,该方法创建一个新的数组,其中所有子数组元素以递归方式连接到指定的深度;

语法: arr.flat(depth)
arr:需要展平的数组
depth:可选参数,指定嵌套数组结构展平的深度级别,默认为1

let arr = [1,2,[3,4,5,[6,7,8,9]]]
console.log(arr.flat()) // [ 1, 2, 3, 4, 5, [ 6, 7, 8, 9 ] ]
console.log(arr.flat(1)) // [ 1, 2, 3, 4, 5, [ 6, 7, 8, 9 ] ] # 可以看出默认深度为1
console.log(arr.flat(2)) // [1, 2, 3, 4, 5, 6, 7, 8, 9]
console.log(arr.flat(4)) // 当参数深度大于数组嵌套的层数,
// 默认也是将数组展平  [1, 2, 3, 4, 5, 6, 7, 8, 9]

方法三: 使用reduce处理

let arr = [ [0, 1], [2, 3], [4, [5, 6, 7]]]
function fn(arr) {return arr.reduce((pre,cur) => {return pre.concat(Array.isArray(cur) ? fn(cur) : cur)},[])
}
console.log(fn(arr)) // [0,1,2,3,4,5,6,7]

方法四: 运用toString()、split() 及toString()三个语法来进行扁平化数据。(缺陷:string类型的数字被转换成number类型了)

let arr = [[0,1], [2, 3], [4, 5, 'q', 'w', 'e', 'r'] ]
let newArr = []
newArr = arr.toString().split(',').map(item => {if(Number(item).toString() === 'NaN') return itemreturn Number(item)
})
console.log(newArr)

常见的树形结构数据案例:

 let tree = [{id: 1,name: "1",pid: 0,children: [{id: 2,name: "2",pid: 1,children: []},{id: 3,name: "3",pid: 1,children: [{id: 4,name: "4",pid: 3,children: []}]}]}]function treeToArray(tree) {return tree.reduce((res, item) => {const { children, ...i } = itemreturn res.concat(i, children && children.length ? treeToArray(children) : [])}, [])}console.log(treeToArray(tree))// [//     {id: 1, name: '1', pid: 0},//     {id: 2, name: '2', pid: 1},//     {id: 3, name: '3', pid: 1},//     {id: 4, name: '4', pid: 3}// ]

反扁平化

 let tree = [{id: 1, name: '1', pid: 0},{id: 2, name: '2', pid: 1},{id: 3, name: '3', pid: 1},{id: 4, name: '4', pid: 3}]function fn(tree) {let tree1 = {}let flatArr = tree.map(item => {item.children = tree.filter(val => val.pid == item.id)if(item.pid == 0) return itemelse return})return flatArr.filter(item => item != undefined)}console.log(fn(tree))//  [//     {//         id: 1,//         name: "1",//         pid: 0,//         children: [//             {//                 id: 2,//                 name: "2",//                 pid: 1,//                 children: []//             },//             {//                 id: 3,//                 name: "3",//                 pid: 1,//                 children: [//                     {//                         id: 4,//                         name: "4",//                         pid: 3,//                         children: []//                     }//                 ]//             }//         ]//     }// ]
以上只是个人平时学习时记录的方法,如果大家有更好的方法,记得分享给我哈,谢谢!

数据扁平化与反扁平化相关推荐

  1. PyTorch框架学习十——基础网络层(卷积、转置卷积、池化、反池化、线性、激活函数)

    PyTorch框架学习十--基础网络层(卷积.转置卷积.池化.反池化.线性.激活函数) 一.卷积层 二.转置卷积层 三.池化层 1.最大池化nn.MaxPool2d 2.平均池化nn.AvgPool2 ...

  2. [CNN] 卷积、反卷积、池化、反池化

    之前一直太忙,没时间整理,这两天抽出点时间整理一下卷积.反卷积.池化.反池化的内容,也希望自己对一些比较模糊的地方可以理解的更加清晰. 一.卷积 1.卷积的简单定义 卷积神经网络中的卷积操作可以看做是 ...

  3. 深度学习(一)神经网络中的池化与反池化原理

    原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/9579108.html 参考博客:https://blog.csdn.net/chengqium ...

  4. json与java反射_Java 对象的 Json 化与反 Json 化

    最近在家里修习 Java 这项技能,估计快点满技能点儿了,很开心.不过遇到了一个问题,困扰了我一阵子.问题是这样的,我要写 Android App,与服务器交互.大家都知道 Javascript 不知 ...

  5. json java对象 简书_Java 对象的 Json 化与反 Json 化

    最近在家里修习 Java 这项技能,估计快点满技能点儿了,很开心.不过遇到了一个问题,困扰了我一阵子.问题是这样的,我要写 Android App,与服务器交互.大家都知道 Javascript 不知 ...

  6. Java:JSON扁平化和去扁平化

    今天小编在github上发现了一个比较好的JSON扁平化和去扁平化处理方法,话不多说,直接开干. 1.扁平化数据(网上找的一json大串) "{\"type\":10,\ ...

  7. 什么是 PDF 扁平化?怎样扁平化 PDF? 一起涨知识!

    什么是 PDF 扁平化? 为什么要扁平化 PDF? 怎样扁平化 PDF? 你是否也对扁平化这个概念云里雾里?今天带你研究一下到底什么是 PDF 扁平化,以及如何扁平化 PDF 文件,一起涨知识! 一. ...

  8. 反碎片化技术(外部碎片)的原理

    主要参考了<深入linux内核>和<Linux内核深度解析>,另外简单浅析了一下相关内容 文章目录 反碎片化技术(外部碎片) 虚拟可移动区域 使用方法 技术原理 解析内核引导参 ...

  9. 不安全的反序化基础原理(Insecure deserialization)

    文章目录 不安全的反序化(Insecure deserialization) 什么是序列化? 不安全的反序列化漏洞是如何产生的? 序列化和反序列化本身没有问题,但是如果反序列化的内容是用户可以控制的, ...

最新文章

  1. sort()排序(Comparable、Comparator)
  2. 【开发者的精进】 数据驱动下的程序设计
  3. 基于Spark的电影推荐系统实现
  4. 什么是工序分析法?工序分析的方法和实施步骤有哪些
  5. mac dmg包签名及公证
  6. 三种T检验的详细区分
  7. no-cache和no-store的区别
  8. 程序人生 - 2020年杭州市积分入学实施办法权威解读
  9. python积累--读写文本文件实例
  10. Python提取图片二维码Python
  11. pcm转mp3_前端音频可视化——PCM数据解决方案
  12. 妙法删除多余Windows XP管理员账户
  13. 传感器与检测技术(一)
  14. 二元logistic模型案例_二元选择(logistic的s )模型.ppt
  15. NSX-T系列:第1部分 - 架构和部署
  16. Memcache(MC)系列(五)使用memcache-top监控memcache集群状态
  17. python_爬虫http协议
  18. 关于shm_open和shm_unlink的使用问题 undefined reference to
  19. 【程序人生】阿里大牛专访丨星罡:因为期待_你需要更出色!
  20. 武大计算机系自招,武汉大学自主招生考试模式及武大2017自招考试试题

热门文章

  1. 物理-三菱镜-三菱镜效应:三菱镜效应 百科
  2. 现在网站主流排版方式
  3. windows CMD命令大全及详细解释和语法
  4. Day 41多表查询以及pymysql相关操作 完善
  5. 房屋装修(卫生间/浴室)
  6. 华为路由器:虚拟路由冗余协议VRRP的讲解
  7. 太原师范学院计算机考研资料汇总
  8. 2022烷基化工艺操作证考试题库及模拟考试
  9. window XP驱动开发(一)如何下载WDK
  10. 教你如何把一张图片做成一段视频