指定层级的数组扁平化

815 阅读1分钟

一般的数组扁平化,一镜到底,中间不停,如果只让你扁平化一个数组,并且指定层级的话,怎么实现呢,在此记录一下


const arr = [
	1,
	[
		[1,2,3, [4,5,6, [5,6,7,[3,4,5]]]]
	],
	[
		[
			{a: 1},
			200,
			{
				b: 300,
				c: 200
			},
			[
				3,4,5,
				[
					5,6,7,[
						3,4,5
					]
				]
			]
		]
	]
]

/**
 * 数组扁平化
 * 只扁平至指定层级
 * @param {Array} arr 
 * @param {number} level 
 */
function flatten(arr, level) {
	function walk(arr, currLevel) {
		let res = [];
		for (let item of arr) {
			if (Array.isArray(item) && currLevel < level) {
				res = res.concat(walk(item, currLevel + 1));
			} else {
				res.push(item)
			}
		}
		return res;
	}

	return walk(arr, 1);
}

var res = flatten(arr, 3);
console.log(res);