前端学习-JavaScript每日一题-数组扁平化
数组扁平化问题描述
数据扁平化,指把多维数组变成一维数组
即原始数组:[1,[2,[3,[4,5]]]]
经过扁平化后:[1,2,3,4,5]
数组扁平化的具体方法
数组扁平化实现起来并不复杂,涉及很简单的算法,还可以通过一些JS数组自带的方法实现
使用flat方法实现数组扁平化
- Array.flat(depth)
- depth参数可选,默认为1,表示数组扁平化的层数,设为Infinity则为完全展开
const arr = ['a' , 'b', 'c', ['d','e'], ['f', [ 'g', 'h']]]; console.log(arr.flat());['a','b','c','d','e','f',['g','h']]const arr = ['a' , 'b', 'c', ['d','e'], ['f', [ 'g', 'h']]]; console.log(arr.flat(2));['a','b','c','d','e','f','g','h']
因此使用flat实现扁平化的方法为:
const arr = [1,[2,[3,[4,5]]]];console.log( arr.flat(Infinity) );
使用递归方法实现数组扁平化
- Array.concat()方法
- 该方法可以把数组连接
console.log( [1,2].concat([3,[4,5]]) ); [1,2,3,[4,5]]
- Array.isArray()方法
- 判断输入的元素是否是Array
使用递归方法实现数组扁平化:
要注意:因为Array.concat方法不会改变原来的数组,因此需要进行赋值操作,否则会得到不正确的结果
const arr = [1,[2,[3,[4,5]]]];function flatten(arr){let result = [];for(let i = 0;i<arr.length;i++){if( Array.isArray(arr[i]) ){result = result.concat(flatten(arr[i]));}else{result.push(arr[i]);}}return result;}console.log( flatten(arr) );
复杂度分析:
O(n)
其中n为扁平后一维数组的元素个数
使用reduce方法实现数组扁平化
- Array.reduce()
- 该方法的输入有两个参数,第一个参数是函数,第二个参数可选,为初始值
- 第一个参数:该函数有四个形参,但是通常只用前两个 pre,cur
- pre为上一次函数执行返回的结果
- cur为当前遍历到的数组元素
- 第二个参数:如果不填,则pre默认从数组第一个元素开始,cur为第二个,
- 如果有参数,则pre为参数,cur为数组第一个元素
具体的实现方法:
const arr = [1,[2,[3,[4,5]]]];function flatten(arr){return arr.reduce((pre,cur)=>{return pre.concat( Array.isArray(cur)?flatten(cur):cur );},[]);}console.log( flatten(arr) );
使用Array.toString()和String.split()方式实现数组扁平化
- Array.toString()
- 可以把数组转换成字符串
- 具体的转换效果:
const arr = [1,[2,[3,[4,5]]]];console.log( arr.toString() );"1,2,3,4,5"
- String.split()
- 可以把字符串拆分成数组
- 不填的话默认是整个字符串是数组的一个元素,填写的话就会按分隔符拆分
- 这种方法的问题是,拆分后,数组的每一个元素是字符,而不是数字了
具体实现方法:
const arr = [1,[2,[3,[4,5]]]];console.log( arr.toString().split(",") );
前端学习-JavaScript每日一题-数组扁平化相关推荐
- JavaScript数组常用方法解析和深层次js数组扁平化
前言 数组作为在开发中常用的集合,除了for循环遍历以外,还有很多内置对象的方法,包括map,以及数组筛选元素filter等. 注:文章结尾处附深层次数组扁平化方法操作. 作为引用数据类型的一种,在处 ...
- 前端学习之——js解析json数组
** 前端学习之--js解析json数组 ** 解析json数组即对JSONArray的遍历 一.对于标准的json数组如: var result=[{"flag":1," ...
- JavaScript数组扁平化的实现
数组扁平化 数组扁平化指的是把一个多维数组拆分成一个一维数组. 递归 function flattern(arr){let result = [];for(let i = 0, len = arr.l ...
- 【算法图解|2】JavaScript 如何实现数组扁平化
数组的扁平化,就是将一个嵌套多层的数组 array (嵌套可以是任何层数)转换为只有一层的数组. 举个例子,假设有个名为 flatten 的函数可以做到数组扁平化, var arr = [1, [2, ...
- 前端面试题 HTML5 CSS3(盒子模型、盒子水平垂直居中、经典布局) JS(闭包、深浅克隆、数据劫持和拦截) 算法(排序、去重、数组扁平化) Vue(双向数据绑定原理、通信方式)
前端面试题 HTML5 相关面试题 CSS3 相关面试题 盒子模型 盒子水平垂直居中的方案 经典布局方案 圣杯布局 双飞翼布局 flex布局 定位方式布局 css实现三角形 JS 相关面试题 8种数据 ...
- es6删除数组某一项_精学手撕系列——数组扁平化
参考文章:面试官连环追问:数组拍平(扁平化) flat 方法实现 编者荐语: 在前端面试中,手写flat是非常基础的面试题,通常出现在笔试或者第一轮面试中,主要考察面试者基本的手写代码能力和JavaS ...
- 转成数组_JavaScript之数组扁平化
今天给大家分享一下JavaScript的数组扁平化. 1. 扁平化 数组的扁平化,就是将一个嵌套多层的数组 array (嵌套可以是任何层数)转换为只有一层的数组.举个例子,假设有个名为 flatte ...
- JAVA数组扁平化整合_一文搞定数组扁平化(超全面的数组拉平方案及实现)
前言 面试手写代码在大厂面试中非常常见,秋招中面试小米就手写了一道flat实现的代码题,当时通过递归方式实现了数组扁平化逻辑,但没有考虑多种实现方案及其边界条件(主要是对所涉及到高阶函数的知识点不够熟 ...
- python观察日志(part24)--列表和numpy数组扁平化
学习笔记,仅供参考,有错必究 参考文献:python–列表.数组扁平化:你知道如何将python中嵌套的列表扁平化吗? 列表扁平化 方案1 print(sum([[1, 2, 3], ["s ...
- 实现数组扁平化的 6 种方式
实现数组扁平化的 6 种方式 老规矩,开局先上问题,带着问题去思考: 怎样用最普通的方法解决数组扁平化问题? ES6里面是否有一些高级的方法能够直接实现? 扁平化的实现 数组的扁平化其实就是将一个 ...
最新文章
- go kegg_差异基因的GO与KEGG注释
- 数据可视化组件Grafana详细解读--在Docker上安装Grafana管理平台
- xp系统更改计算机名BIOS设置,XP系统如何设置Netbios名|XP系统设置Netbios名的方法...
- 要想拿到字节50k*16薪,你还需要做什么?
- 创意对抗网络(CANs)你知多少?
- ArcGIS JS API 4 —— GET https://static.arcgis.com/fonts/simsun-regular/37888-38143.pbf 404
- 【java笔记】File类(3):FileFilter文件过滤器原理和使用
- cam350 不能打开光绘文件_导出的光绘文件导入cam350为何出现这个问题?
- 镁光固态硬盘用什么软件测试寿命,最简单的方法:如何查看SSD可以使用多长时间?固态硬盘寿命测试方法[详细]...
- Vue.js菜鸟教程自学(一)
- 21个2021年软件开发趋势预测
- 树莓派python虚拟环境的设置与使用
- 美通社日历 | 媒体关注、会展信息、企业财报发布,节假日备忘(12月21日—12月27日)...
- OPENSSL FIPS
- 纯CSS实现图片动画
- 深入浅出TVS瞬态抑态二极管
- 蓝牙SCO与ACL链路
- 【安装】nodesj的addon模块配置使用报错处理
- js时间戳转时间(年-月-日 时:分:秒)
- win10安装Mysql8的两种方式(安装/卸载-图文教程)
热门文章
- 24点计算机游戏规则,24点游戏规则和解题方法
- CSAPP ArchLab
- 17个能帮你节省时间的开发工具!(值得收藏)
- php7实践指南-ch15MySQL数据库的使用
- 基于Android Tv制作一个Tv桌面(三)
- 【shareX】自定义图片上传-基于tu.my最新版API
- 【WSN通信】基于matlab A_Star改进LEACH多跳传输协议【含Matlab源码 487期】
- 优矿 pandas plt 显示平安银行基金月最大召回率
- SGE(集群任务管理系统)常用操作命令
- ldap服务器配置信息错误,ldap服务器概念配置看这一文就够了!