手写实现数组flat、filter等方法

Flat

flat 是将数组扁平化的一种方法。

比如:我们有一个数组:
let arr = [ [1,2,3], [4,5,6], [6,7, [3,4]] ]

现在需要将数组元素转化成 [ 1, 2, 3, 4, 5, 6, 6, 7, [ 3, 4 ] ] (浅扁平)或 [ 1, 2, 3, 4, 5, 6, 6, 7, 3, 4] (深扁平)

  • 浅扁平:只能扁平化二级数组
  • 深扁平:可以扁平多维数组

浅扁平实现

第一种:自带方法

function myFlat(arr) {
  arr = Array.isArray(arr) ? arr : Array.from(arr)
  return arr.flat()
}

第二种:reduce 累加

function myFlatReduce(arr) {
  return arr.reduce((total, current) => total.concat(current), [])
}

深扁平

第一种:经典递归回调法 (参考第三种 Generator 法)

function myFlatRecursion(arr) {
	let result = []
	for(const item of arr) {
		if (Array.isArray(item)) {
			result = result.concat(myFlatRecursion) // concat 合并并返回新数组,不会修改原数组
		} else {
			result.push(item)
		}
	}
	return result
}

第二种:字符串

// 缺点:扁平化后的每一项都是字符串
function myFlatStr(arr) {
  return arr.toString().split(',')
}

第三种:Generator 法

function myFlatGener(arr) {
	for (const item of arr) {
		if (Array.isArray(item)) {
			yield* myFlatGener(item)
		} else {
			yield item
		}
	}
}

待续

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值