好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

ES6+ flat()

ES6+ flat()

1. 前言

在开发中有时会遇到对多维数组进行拍平处理,数组的拍平就是将 一个 嵌套多层的数组进行降维操作,也就是对数值进行扁平化。然而在 ES5 是没有 方法 能处理这样的需求的,大部分都会借助 函数 库的方式来实现。

本节我们要学习的是 ES6 提供的 flat() 方法 ,对多维数组进行扁平化操作,而且可以对数组中的空项进行移除。

2. ES5 中的处理 方法

ES5 中没有类似的 方法 ,如果要达到目标结果需要自己写 函数 针对性处理。

  function   flat  ( arr )  { 
	 if  ( Object . prototype . toString .  call  ( arr )   !=   "[object Array]"  )  {  return   false  }  ; 
	 let  res  =   [  ]  ; 
	 for  (  var  i =  ; i < arr . length ; i ++  )  { 
		 if  ( arr [ i ]   instanceof   Array  )  { 
			res  =  res .  concat  (  flat  ( arr [ i ]  )  ) 
		 }  else  { 
			res .  push  ( arr [ i ]  ) 
		 } 
	 } 
	 return  res ; 
 }  ; 
 var  arr  =   [  ,  ,  [  ,  ,  ,  [  ,  ,  ]  ,  ]  ,  ,  [  ,  ]  ]  ; 
 flat  ( arr )  ; 	 // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] 
 

上面的 代码 是实现了 一个 数组扁平化的 方法 ,在里面我们会定义 一个 空数组然后递归地去 调用 flat() 方法 处理原数组中的每一项,如果传入的是元素是数组,则要继续递归处理,最终会得到 一个 一维的数组。此 方法 只能把任意维度的数组转化为一维数组,不能转化为指定维度的数组,如果需要的话还得继续处理。

由此可见,扁平化数组是一件很麻烦的事,ES6 提供的 flat() 方法 完美地 解决 了扁平化数组所带来的问题,下面我们就来学习 flat() 方法 吧。

3. 方法 详情

3.1 语法使用

使用 flat() 方法 会接收 一个 参数,这个参数是 数值类型 ,是要处理扁平化数组的深度, 生成 后的新数组是独立存在的,不会对原数组产生影响。由此我们也可以使用它深拷贝 一个 数组,下文我们会用 一个 案例说明。

语法使用:

  var  newArray  =  arr .  flat  (  [ depth ]  ) 
 

参数解释:

参数 描述 @H_209_ 301 @depth @H_209_ 301 @指定要 提取 嵌套数组结构的深度, 默 认值为 1

查看更多关于ES6+ flat()的详细内容...

  阅读:40次

上一篇

下一篇

第1节:ES6+ 简介    第2节:ES6 环境配置    第3节:ES6+ let    第4节:ES6+ const    第5节:ES6+ 展开语法    第6节:ES6+ 剩余参数    第7节:ES6+ 解构赋值    第8节:ES6+ 模版字符串    第9节:ES6+ 箭头函数    第10节:ES6+ 数值扩展    第11节:ES6+ isFinite()&isNaN()    第12节:ES6+ Number 对象的方法    第13节:ES6+ Math 对象的扩展    第14节:ES6+ includes()    第15节:ES6+ 字符串的扩展    第16节:ES6+ startsWith()    第17节:ES6+ endsWith()    第18节:ES6+ repeat()    第19节:ES6+ padStart()    第20节:ES6+ padEnd()    第21节:ES6+ trim()    第22节:ES6+ Array.from()    第23节:ES6+ of()    第24节:ES6+ find()和findIndex()    第25节:ES6+ copyWithin()    第26节:ES6+ fill()    第27节:ES6+ isArray()    第28节:ES6+ 对象的扩展    第29节:ES6+ flat()    第30节:ES6+ 可选链操作符    第31节:ES6+ Object.is()    第32节:ES6+ Object.assign()    第33节:ES6+ Object.keys()    第34节:ES6+ Object.values()    第35节:ES6+ Object.entries()    第36节:ES6+ 数据结构扩展    第37节:ES6+ Set    第38节:ES6+ WeakSet    第39节:ES6+ Map    第40节:ES6+ WeakMap    第41节:ES6+ Symbol    第42节:ES6+ for...of    第43节:ES6+ 迭代协议    第44节:ES6+ 实现一个简版的 Promise    第45节:ES6+ Promise 基础    第46节:ES6+ Promise 进阶    第47节:ES6+ Generator 基础    第48节:ES6+ Generator 函数应用    第49节:ES6+ async/await    第50节:ES6+ Class 前置知识    第51节:ES6+ Class    第52节:ES6+ Proxy    第53节:ES6+ Reflect(一)    第54节:ES6+ Reflect(二)    第55节:ES6+ 模块化(一)    第56节:ES6+ 模块化(二)    第57节:ES6实战1-实现Vue3 reactive 源码    第58节:ES6实战2-实现 Vue3 effect 源码    第59节:ES6 实战2-封装请求    第60节:ES6+ 实战3-代码整洁之道    第61节:ES6 Map原理分析    第62节:ES6module语法加载importexport    第63节:ES6的循环与可迭代对象示例详解