数组扁平化的方法汇总

一、数组扁平化

数组扁平化就是,把多维数组将维变成一维数组,我们看一下最基本的用法

let arr = [1,2,[3,4],[5,6],7,8];//二维数组
console.log(arr.flat();)//[1,2,3,4,5,6,7,8];//一维数组

//二维以上数组
//使用官方给的方法 var flatter = arr.flat([depth]);//depth可以指定嵌套的层级  `[]`:表示可以传也可以不传,默认是1
let arr2 = [1,2,[3,4,[5,6]],[7,8]];//三维数组
console.log(arr2.flat(2));//[1,2,3,4,5,6,7,8]

二、其他的方式汇总

1.迭代实现

	let arr2 = [1,2,[3,4,[5,6]],[7,8]];
	while(arr2.some(item=>Array.isArray(item))){
		//这个地方主要使用es6 扩展运算符 `...`
		arr = [].concat(...arr);
	}
	return arr;// [1,2,3,4,5,6,7,8]

2.普通递归实现

	let arr3 =  [1,2,[3,4,5,[6,7],8],9,10,[11,[12,13]]];
	const flatten = (arr)=>{
		let result = [];
		arr.forEach((item,i,arr)=>{
			if(Array.isArray(item)){
				//如果item是一个数组,那么就继续递归,直到不是数组;
				result = [].concat(flatten(item));
			}else{
				result.push(arr[i]);
			}
		})
		return result;//[1,2,3,4,5,6,7,8,9,10,11,12,13]
	}

3.高级递归

	const flatten = array=>array.reduce(pre,cur)=>(Array.isArray(cur)?[...pre,...cur]:[...pre,cur],[])
	//pre 有默认值是[],所以只需先先判断cur就行了,具体的可以看reduce的默认参数。

4.toString方法

let arr4 = [1,2,3,4,[5,6,[7,8]],9,10];
console.log(arr4.toString();)//"1,2,3,4,5,6,7,8,9,10"
console.log(arr4.toString().split(','))//[1,2,3,4,5,6,7,8,9,10]

5.apply方法

使用这个方法之前我们需要知道apply这个方法是如何使用的,下面我们说一下使用这个方法的基本要求

我们可以使用 push 将元素追加到数组中。由于 push 接受可变数量的参数,所以也可以一次追加多个元素。

但是,如果 push 的参数是数组,它会将该数组作为单个元素添加,而不是将这个数组内的每个元素添加进去,因此我们最终会得到一个数组内的数组。如果不想这样呢?concat 符合我们的需求,但它并不是将元素添加到现有数组,而是创建并返回一个新数组。然而我们需要将元素追加到现有数组…那么怎么做好?难道要写一个循环吗?别当然不是!

apply 正派上用场!

let arr = [1,2,[3,4,5,[6,7],8],9,10,[11,[12,13]]];

const flatten = array=>{
	while(arr.some(item=>Array.isArray(item)){
		arr = [].concat.apply([],arr);
	}
	return arr;//[1,2,3,4,5,6,7,8,9,10,11,12,13]
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值