我是靠谱客的博主 追寻小懒猪,最近开发中收集的这篇文章主要介绍JavaScript 数组扁平化的几种方法1.ES6的flat()2.借助JSON方法3.递归4.reduce()递归5.迭代,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Q:什么是数组扁平化
A:把一个多维数组变成一维数组就是数组扁平化
例如:
[1, 2, [3, 4, [5, 6, [7, 8, [9]]]]]

  • 拉伸为一维数组[1, 2, 3, 4, 5, 6, 7, 8, 9]
  • 拉伸为二维数组[1, 2, 3, 4, 5, 6, 7, 8, [9]]
  • 拉伸为三维数组[1, 2, 3, 4, 5, 6, 7, 8, [7, 8, [9]]]
  • 拉伸一层[1, 2, 3, 4, [5, 6, [7, 8, [9]]]]
  • 拉伸两层[1, 2, 3, 4, 5, 6, 7, 8, [7, 8, [9]]]

Q:数组扁平化有什么作用?
A:这个其实我也不知道,我也是停留在理论层面,没有什么实战经验的。但是 据我老师说,可以处理复杂的后台数据。你想一下,如果你接受到一个json文件,里边的数据一层一层一层又一层的洋葱一样的嵌套,那你要取用数据就是很麻烦的,所以比就需要把它扁平化处理。

好了不扯了。


文章目录

  • 1.ES6的flat()
  • 2.借助JSON方法
  • 3.递归
  • 4.reduce()递归
  • 5.迭代


1.ES6的flat()

语法:var newArray = arr.flat(depth)

  • depth:指定要拉伸的层数,默认值为1。

默认不写参数,就将其拉伸一层。
在这里插入图片描述
参数写Infinity直接拉伸成一维数组
在这里插入图片描述

2.借助JSON方法

let arr = [1, 2, [3, 4, [5, 6, [7, 8, [9]]]]]

let res = JSON.stringify(arr)	//res = [1,2,[3,4,[5,6,[7,8,[9]]]]]	(string)
res = res.replace(/[|]/g,'')	//res = 1,2,3,4,5,6,7,8,9			(string)
res = '[' + res + ']'			//res = [1,2,3,4,5,6,7,8,9]			(string)
res = JSON.parse(res)			//res =  [1, 2, 3, 4, 5, 6, 7, 8, 9](array)

如果嫌麻烦你可以写成一句

let res = JSON.parse(`[${JSON.stringify(arr).replace(/([|])/g, '')}]`)

3.递归

function flat(arr) {
	let result = []
	for (let i of arr) {
		i instanceof Array ? result = result.concat(flat(i)) : result.push(i)
		//i是Array的实例?是的话继续递归展开,不是的话将i放入结果数组
	}
	return result
}
flat(arr)

4.reduce()递归

reduce()方法介绍:

  • 语法:array.reduce(function(total, currentValue, currentIndex, arr), initialValue)
  • 参数:
    • function(total,currentValue, index,arr)
      • total 必需。初始值, 或者计算结束后的返回值。
      • currentValue 必需。当前元素
      • currentIndex 可选。当前元素的索引
      • arr 可选。当前元素所属的数组对象。
    • initialValue 可选。传递给函数的初始值
function flat(arr) {
	return arr.reduce((a, i) => {
		return a.concat(i instanceof Array ? flat(i) : i)
	}, [])
}
flat(arr)
  • function -(a, i) => {...}
    • total - a
    • currentValue - i
  • initialValue -[]

5.迭代

some()方法介绍:
some() 方法用于检测数组中的元素是否满足指定条件(函数提供)。
some() 方法会依次执行数组的每个元素:

  • 如果有一个元素满足条件,则表达式返回true , 剩余的元素不会再执行检测。
  • 如果没有满足条件的元素,则返回false。
    注意: some() 不会对空数组进行检测,不会改变原始数组。
  • 语法:array.some(function(currentValue,index,arr),thisValue)
  • 参数:
    • function(currentValue, index,arr) 必须。函数,数组中的每个元素都会执行这个函数
      • currentValue 必须。当前元素的值
      • index 可选。当前元素的索引值
      • arr 可选。当前元素属于的数组对象
    • thisValue 可选。对象作为该执行回调时使用,传递给函数,用作 “this” 的值。
      如果省略了 thisValue ,“this” 的值为 “undefined”
while (arr.some(Array.isArray)) {
	arr = [].concat(...arr);
}

回顾知识点啦。

最后

以上就是追寻小懒猪为你收集整理的JavaScript 数组扁平化的几种方法1.ES6的flat()2.借助JSON方法3.递归4.reduce()递归5.迭代的全部内容,希望文章能够帮你解决JavaScript 数组扁平化的几种方法1.ES6的flat()2.借助JSON方法3.递归4.reduce()递归5.迭代所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(65)

评论列表共有 0 条评论

立即
投稿
返回
顶部