今天给大家分享一下JavaScript的数组扁平化。

1. 扁平化

数组的扁平化,就是将一个嵌套多层的数组 array (嵌套可以是任何层数)转换为只有一层的数组。举个例子,假设有个名为 flatten 的函数可以做到数组扁平化,效果就会如下:

知道了效果是什么样的了,我们可以去尝试着写这个 flatten 函数了。

2. 递归

我们最一开始能想到的莫过于循环数组元素,如果还是一个数组,就递归调用该方法:

3. toString

如果数组的元素都是数字,那么我们可以考虑使用 toString 方法,因为:[1, [2, [3, 4]]].toString()

调用 toString 方法,返回了一个逗号分隔的扁平的字符串,这时候我们再 split,然后转成数字不就可以实现扁平化了吗?

然而这种方法使用的场景却非常有限,如果数组是 [1, '1', 2, '2'] 的话,这种方法就会产生错误的结果。

4. undercore

那么如何写一个抽象的扁平函数,来方便我们的开发呢,所有又到了我们抄袭 underscore 的时候了,在这里直接给出源码和注释,但是要注意,这里的 flatten 函数并不是最终的 _.flatten,为了方便多个 API 进行调用,这里对扁平进行了更多的配置。

解释下 strict,在代码里我们可以看出,当遍历数组元素时,如果元素不是数组,就会对 strict 取反的结果进行判断,如果设置 strict 为 true,就会跳过不进行任何处理,这意味着可以过滤非数组的元素。注意,以上实现的细节并不是完全按照 underscore。

学习相关推荐(编程必备辅助):

①:搜索关注公众号“只会写BUG”,分享更多干货知识,资讯,教程等

②:海量编程类资料零基础到高级亟待领取!!!

如果觉得对你有一丢丢帮助,麻烦动动你的小手指【关注】一下上面的公众号吧,或者【转发】让更多人看到该文章。大家也可积极后台给我留言,多多交流,共同进步。

转成数组_JavaScript之数组扁平化相关推荐

  1. java script 遍历数组_JavaScript中数组中遍历的方法

    前言 最近看了好几篇总结数组中遍历方法的文章,然而"纸上得来终觉浅",决定此事自己干.于是小小总结,算是自己练手了. 各种数组遍历方法 数组中常用的遍历方法有四种,分别是: for ...

  2. Dao接口返回数组_JavaScript二进制数组(2)TypedArray视图

    ArrayBuffer对象作为内存区域可以存放多种类型的数据.同一段内存,不同数据有不同的解读方式,这种解读方式称为"视图(view)".ArrayBuffer有两种类型的视图,一 ...

  3. js中遍历数组加到新数组_javaScript 遍历数组方法总结

    数组和对象一样都是引用数据类型,数组中的数据按照顺序排列,从0开始,把这个叫做索引,也叫做下标,把数组中的每个数据叫做元素,或者简称元 . 数组的新建方式有字面量创建和构造函数创建两种方法 字面量创建 ...

  4. JS - 将tree(树形)数据结构格式改为一维数组对象格式(扁平化)

    需求:将JSON①数据格式输出为JSON②格式. JSON①: [{sortName:'小明',sortCode: 'xm',children:[]},{sortName:'小刚',sortCode: ...

  5. 树形json扁平化,一维数组树状化,对象深拷贝,元素后插入新元素,格式或动态路由等常用js合集

    索引 一.在元素后面插入一个新的元素. 二.对象或者数组的深拷贝. 三.从服务器端获取到动态路由表的格式化. 四.json树形数据扁平化处理(变成一维数组) 五.一维数组转化为树状结构对象. 六.防抖 ...

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

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

  7. 数组去重与数组扁平化

    一.数组去重(1)indexOf() function only(arr){var res=[];arr.forEach(function(item){if(res.indexOf(item)==-1 ...

  8. JAVA数组扁平化整合_数组扁平化的几种处理放法

    清明节,这几天放假闲来无事,好好研究一下基础知识,今天看看数组扁平化该怎么处理: 先来看数组扁平化是什么: var arr = [1,2,3,4,[5,6,[7,8]],true] => [1, ...

  9. web前端数组处理之扁平化数组

    在进行前端开发的时候避免不了会遇到很多数组的情况,其中不乏会存在数组套数组或者需要合并数组的情况.今天小千就来给大家介绍一下如何将数组扁平化处理. 数组扁平化概念:用于将嵌套多层的数组"拉平 ...

最新文章

  1. android听书功能实现,基于Android的喜马拉雅听书的实现.docx
  2. Mako 模板系统文档翻译(1) 使用基础
  3. -webkit-font-smoothing
  4. android+Unity3D游戏开发之简单的物体运动
  5. python求二维数组各行最大值_python+numpy按行求一个二维数组的最大值方法
  6. Qt弹出的窗口始终位于界面最前面的方法
  7. PHP套入表格公式,单元格公式引用的方法
  8. nlp项目:搭建一个简单的问答系统
  9. 详解最实用的几种dll注入方式
  10. Linux系统手机投屏实现电脑控制手机(Windows)
  11. java中导入自定义类_导入自定义Java类
  12. CF 106C Buns
  13. Hackthebox:Devel Walkthrough
  14. 从titles表获取按照title进行分组,每组个数大于等于2,给出title以及对应的数目t
  15. 水印相机定位不准确怎么办_云联相机app下载-云联相机app安卓版下载v1.0.0
  16. k8s job机制初探
  17. 大数据时代到来如何构建国家地质基础数据更新体系
  18. Verycd上.net一些教程,自己留着做备忘..
  19. ORA-39126: 在 KUPW$WORKER.PUT_DDLS [TABLE_STATISTICS] 中 Worker 发生意外致命错误
  20. linux endpoint,Microsoft Defender for Endpoint (Linux)新增终端安全响应功能

热门文章

  1. Spring 4 MVC入门实例
  2. Linux内核Crash分析
  3. Linux logo和屏幕光标
  4. vxworks 调式
  5. java桥_JAVA 桥模式
  6. css 实现标签切换,CSS_纯CSS实现Tab切换标签效果代码,本文实例讲述了纯CSS实现Tab切 - phpStudy...
  7. 如何使用网上下载的arcgis工具箱,报错汇总
  8. arcgis中字段计算器利用python比较大小
  9. Azure Table storage 基本用法 -- Azure Storage 之 Table
  10. 屏幕录像专家6.0_迅捷屏幕录像工具和屏幕录像专家哪个更好用?