JS手写数组扁平化(可控制扁平化维度)

  1. 什么是数组扁平化?
    将多维度数组转为一维,或者说将多层嵌套数组转换成最外一层有且只有一个中括号[]包裹元素数组,如:[1, 2, [3, 4], 5, [6, [7, 8]], 9] =》[1, 2, 3, 4, 5, 6, 7, 8, 9]

  2. 实现方案
    有很多实现方案,这里只列出两种:
    ① 通过ES6提供的数组扁平化API——flat实现
    arr.flat(deep): 参数deep是控制扁平化维度,值为Number,0则不进行扁平化,返回原数组,infinite则扁平化所有维度,只有最外一层[]包裹元素。
    ② 手写递归函数实现(传入维度,可控制扁平化维度或者说扁平化的深度或层次)
    思路:
    (1)创建一个新数组用来存放扁平化处理后的元素。
    (2)遍历要处理的数组元素,判断每个元素类型,非数组元素或深度为0(不扁平当前维度)就推入新数组中,是数组元素还要判断深度大于0,满足就将深度减一并且递归遍历处理将返回的数组与新数组拼接。
    (3)返回新数组

// arr要处理的数组,depth是控制扁平化维度
function myFlat(arr, depth) {
	const a = []
	arr.forEach(ele => {
		if (Array.isArray(ele) && depth > 0) {
			depth--
  			a = a.concat(myFlat(ele, depth))
		} else {
			a.push(ele)
		}
	})
	return a
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值