手写实现数组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
		}
	}
}

待续


版权声明:本文为qq_37820580原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。