转成数组_JavaScript之数组扁平化

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

1. 扁平化

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

a9d492aa948e1da36c05321c654102d9.png

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

2. 递归

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

873dcb351eff127aea217cedbd386eea.png

3. toString

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

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

b0551f06da5818e4549ede068f7ef09f.png

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

4. undercore

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

52700edfb2a2bc587101551a99d146a6.png

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

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/441811.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【POJ - 2676】Sudoku (经典深搜,dfs数独)

题干: Sudoku is a very simple task. A square table with 9 rows and 9 columns is divided to 9 smaller squares 3x3 as shown on the Figure. In some of the cells are written decimal digits from 1 to 9. The other cells are empty. The goal is to fill…

overleaf表格_latex 表格制作

在制作latex表格时遇到了以下问题:一、合并单元格包括多行合并、多列合并、多行多列同时合并。多行合并: \multirow{2}{*}{Multi-Row}多列合并: \multicolumn{2}{|c|}{Multi-Column}多行多列同时合并:\multicolumn{2}{|c|}{\multi…

【HihoCoder - 1268】九宫 (dfs,深搜)

题干: 小Hi最近在教邻居家的小朋友小学奥数,而最近正好讲述到了三阶幻方这个部分,三阶幻方指的是将1~9不重复的填入一个3*3的矩阵当中,使得每一行、每一列和每一条对角线的和都是相同的。 三阶幻方又被称作九宫格,在…

河北师范大学计算机应用技术分数线,2019年河北师范大学各专业录取分数线

高考总分达到或超过某一分数线的考生档案,才有资格被招生高校调阅并选择录取。各高校不同专业每一年的录取分数线有所区别,下文是小编给大家整理的2019年河北师范大学各省各专业高考录取分数线详情,供参考!2019河北师范大学各省各…

计算机英语反思总结,计算机在英语教学中辅助作用的反思

计算机在英语教学中辅助作用的反思 (3页)本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!9.9 积分题目:计算机在英语教学中辅助作用的反思科目: SS 学校: 灵石第一职…

极限脱出 量子计算机,《极限脱出3:零时困境》难点解密攻略 剧情通关密码一览...

《极限脱出3:零时困境》这款解密游戏很多时候会卡住,如何通关呢?下面小编就给大家分享一下《极限脱出3:零时困境》中几个难点解密,需要过关密码的朋友可以收藏一下哦。游戏过程中经常会卡在三处:1.玩家发现…

mysql缓存淘汰机制_聊聊缓存淘汰算法-LRU 实现原理

前言我们常用缓存提升数据查询速度,由于缓存容量有限,当缓存容量到达上限,就需要删除部分数据挪出空间,这样新数据才可以添加进来。缓存数据不能随机删除,一般情况下我们需要根据某种算法删除缓存数据。常用淘汰算法有…

三个月计算机培训班,三个月复盘:学完两个设计软件,并开始学画画

从4月1日开始明确目标,到6月30日,整整三个月的时间,我一直在努力前行。其中有多次的调整,但整体方向不变。来梳理一下这三个月所做的事:4.1-5.26 完成PS学习(75课)5.27-6.26 完成CDR学习(65课)5.27 从零基础开始学习画…

pythonjson实例_python:JSON的两种常用编解码方式实例解析

概念JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写。在日常的工作中,应用范围极其广泛。这里就介绍python下它的两种编解码方法:使用json函数使用 JSON 函数需要导入 json 库:import json。函数…

caxa计算机编程,CAXA软件编程实例1

课时:75节课时长:24.1小时课级:中级提高课程从基础讲起,仅贴实际生产实践,适合职业院校教师、企业技术员、学生学习,讲解细致、全面,带你学习带你飞、软件使用常见问题及解决方法和使用技巧详细…

python中常用的函数有哪些_Python 最常用的语句、函数有哪些?

一、常用语句1、条件语句:if else一句话概括该语句作用:非此即彼。python中的 if else 的语句功能更加强大、更加灵活。2、循环语句:for & while循环语句中,还有两个关键字至为重要:continue 与 break。这两个关键…

计算机函数select,select函数

学习目标了解select函数的各参数的作用,能够在程序设计中正确使用select函数使用select函数,编写一个简单socket服务器程序,可支持多客户端连接1、select函数机制select函数允许程序同时在等待多个底层文件描述符输入的到达,并且只…

【CodeForces - 833A】The Meaningless Game(思维题,数学,可用牛顿迭代法,知识点总结)

题干: Slastyona and her loyal dog Pushok are playing a meaningless game that is indeed very interesting. The game consists of multiple rounds. Its rules are very simple: in each round, a natural number k is chosen. Then, the one who says (or ba…

python创建变量并赋值_python怎么给变量赋值

在学习变量及赋值之前,我们要知道什么是变量! Python语言中,用等号【=】来表示赋值,Python赋值并不是直接将一个值赋值给一个变量,在Python中,对象是通过引用传递的;在传递时,不管这个对象是新创建的还是已经存在的,都是将该对象的引用赋值给变量。 举个例子,3 * 4 =…

正则表达式 python_Python正则表达式总结

之前我们讲解了 正则表达式 的起源、发展、流派、语法、引擎、优化等相关知识,今天我们主要来学习一下 正则表达式在 Python语言 中的应用!大多数编程语言的正则表达式设计都师从Perl,所以语法基本相似,不同的是每种语言都有自己的…

【HDU - 5912】Fraction (模拟)

题干: Mr. Frog recently studied how to add two fractions up, and he came up with an evil idea to trouble you by asking you to calculate the result of the formula below: As a talent, can you figure out the answer correctly? Input The first …

vue mysql webapp_基于Laravel+VueJS实战开发WebAPP

资源介绍【课程内容】1-git库与开发环境及工具软件介绍2-安装laravel框架3-安装laravel-ide-helper增强代码提示4-配置数据库与使用migrations创建表5-解决mysql5.7以下laravel不能执行数据迁移的问题6-合理的路由布局与分组路由7-远程开发环境服务器搭建与虚拟面板的使用8-使用…

计算机测试怎么提交,Win7电脑怎么测试上传速度?

做网站的人都知道上传速度是很重要的,因为太差的上传速度会影响工作的进度,所以他们经常要对上传速度进行测试,但是有一些新手不知道Win7电脑怎么测试上传速度?为此小编赶紧整理了以下教程,不知道的朋友赶紧来看看吧&a…

harmonyos消息服务器,第三方纯HarmonyOS应用太少,你还愿意升级吗?

部分纯鸿蒙 HarmonyOS 应用已上线:图标多了“HMOS”角标标识,而只有真正的鸿蒙系统应用才能真正体验到万能卡片等系列的功能,但是很明显目前真正属于鸿蒙系统的第三方应用太少……基本上都是华为自身的应用,那么如果应用太少你还愿…

300英雄服务器维护多久,《300英雄》2021年5月20日6:00-9:00更新维护公告

尊敬的《300英雄》玩家:《300英雄》将于2021年5月20日6:00-9:00(星期四),对所有大区进行停机更新,更新期间,您将无法登录游戏。如果在预定时间内无法完成维护内容,开服时间也将继续顺延。具体更新内容如下:一、活动相关…