数组扁平化即将多维数组转化为一维数组:

例: [1,2,3,4,5,[2,3,4,[6,10]]]==>[1,2,3,4,5,2,3,4,6,10];

实现数组扁平化的方法有好几种,在这里只说一种我比较常用的,自己感觉比较核心的方法,即遍历数组arr,若arr[i]为数组则递归遍历,直至arr[i]不为数组然后与之前的结果concat。

代码实现:

function flatten(arr) {var res = [];arr.map(item => {if(Array.isArray(item)) {res = res.concat(flatten(item));} else {res.push(item);}});return res;
}

或者:

var arr = [[1,2,3],4,5,6,[[7]],[]]  //多维数组//将需要转化的数组,以及最后需要返回的数组进行传参
function flatten(array,result = []){
//循环数组中的每一项,如果这一项是数组,则再次调用这个函数,
//否则直接将这项push到结果中,并且return出来for(var i of array){  if(Array.isArray(i)){flatten(i,result)}else{result.push(i)}}return result;}console.log(flatten(arr))

递归实现数组的扁平化相关推荐

  1. js的tree数组对象扁平化思否_JS专题之数组展开

    前言 首先什么是数组展开? 假如现在有这样一个需求:将后台的一个多重 List 数据,展开成一个 List 后,并去重后排序: ["a", "b", [&quo ...

  2. JavaScript数组的扁平化:将 2D JavaScript 二维数组转换为 1D 一维数组(多种方法)

    推荐阅读: js对象扁平化:_南北极之间的博客-CSDN博客_js扁平化js对象扁平化的方法:1.使用 concat() 方法在2. 使用 flat() 方法3.使用用户定义的函数此示例将设置一个包含 ...

  3. js的tree数组对象扁平化思否_js 中的tree型数组如何去重与合并?

    假设数据是这样的,不难发现,其中父级roleCode有重复的,子级roleCode也有重复的,如何做到把重复的去掉,同时,又可以把不重复的合并到一起呢? testTreeData: [ { roleC ...

  4. php n维数组扁平化,js嵌套的数组扁平化:将多维数组变成一维数组以及push()与concat()区别的讲解...

    数组的扁平化:将多维数组变成一维数组 对于一个像这样的嵌套数组:a=[1,[2,[3,4]],5,6]我们想要把它变成一个一维数组,有下面几种方法: 方法一:递归一 function parseArr ...

  5. 【算法图解|2】JavaScript 如何实现数组扁平化

    数组的扁平化,就是将一个嵌套多层的数组 array (嵌套可以是任何层数)转换为只有一层的数组. 举个例子,假设有个名为 flatten 的函数可以做到数组扁平化, var arr = [1, [2, ...

  6. 转成数组_JavaScript之数组扁平化

    今天给大家分享一下JavaScript的数组扁平化. 1. 扁平化 数组的扁平化,就是将一个嵌套多层的数组 array (嵌套可以是任何层数)转换为只有一层的数组.举个例子,假设有个名为 flatte ...

  7. es6删除数组某一项_精学手撕系列——数组扁平化

    参考文章:面试官连环追问:数组拍平(扁平化) flat 方法实现 编者荐语: 在前端面试中,手写flat是非常基础的面试题,通常出现在笔试或者第一轮面试中,主要考察面试者基本的手写代码能力和JavaS ...

  8. 实现数组扁平化的 6 种方式

    实现数组扁平化的 6 种方式 老规矩,开局先上问题,带着问题去思考: 怎样用最普通的方法解决数组扁平化问题? ES6里面是否有一些高级的方法能够直接实现? 扁平化的实现   数组的扁平化其实就是将一个 ...

  9. 实现数组扁平化的6种方式

    扁平化的实现 数组的扁平化其实就是将一个嵌套多层的数组 array(嵌套可以是任何层数)转换为只有一层的数组. 普通的递归实现 普通的递归思路很容易理解,就是通过循环递归的方式,一项一项地去遍历,如果 ...

最新文章

  1. html页面调用ico图标,如何在HTML中使用图标字体 - icon font?
  2. sonarqube使用教程
  3. PHP 会话 线程 进程,接上节我们来了解了解多进程的一些基础进程 / 线程 / 多进程 / 父进程 / 子进程 / 会话 / 控制终端等...
  4. iOS GCD, 同步,异步,串行队列,并行队列,dispatch_group
  5. 信息化之路------广州行
  6. 【树链剖分】LCA(P4211)
  7. NLP研究者必备的语言学书籍!
  8. 关于linux中的上下文切换
  9. 【重磅】华为:2021数字化转型,从战略到执行.pdf(附103页原文下载链接)
  10. 酷应用,这个小玩意为中国软件业趟出了一条新路
  11. 读书记录(持续更新...)
  12. 理解WidowManager
  13. python中__future__包
  14. mac版锐捷显示无法连接到服务器,MAC升级10.9后校园网(锐捷)客户端无法连接怎么办?...
  15. 步进电机驱动C语言代码,单片机控制步进电机系统(C语言源代码)
  16. blos硬盘启动台式计算机,教你联想 (Lenovo)台式机bios修改硬盘启动技巧
  17. 流媒体传输协议(rtp/rtcp/rtsp/rtmp/mms/hls)
  18. 计算机组成原理知识点梳理
  19. 强力回击 跨境侵权(TRO)卖家通过诉讼大获全胜,还净赚数万?
  20. 数据中台功能架构和技术选型

热门文章

  1. 测试/开发程序员喜欢跳槽?跳了就能涨工资吗?
  2. Playwright之初体验
  3. k8s - service
  4. Vistor-访问者模式
  5. OpenCL设备存储形式
  6. 2.7 zio入门——更多的Effect构造函数
  7. Python re模块,正则表达式
  8. WiFi的单频和双频
  9. 电商移动Web实战项目(1)
  10. vue项目中swiper动态更新后无法轮播问题 附带案例代码