前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >如何用JavaScript实现数组扁平化

如何用JavaScript实现数组扁平化

作者头像
henu_Newxc03
发布2022-05-05 18:14:59
发布2022-05-05 18:14:59
54000
代码可运行
举报
运行总次数:0
代码可运行

🧐 什么是数组扁平化

将嵌套多层的数组“拉平”,变为一维数组。

🤔 为什么要数组扁平化

去除冗余,厚重和繁杂的装饰效果。

😎 如何进行数组扁平化

方法一:递归实现

思路就是通过循环递归的方式,一项一项的去遍历,如果每一项还是一个数组,那么就继续往下遍历,利用递归程序的方法,来实现数组每一项的连接

代码语言:javascript
代码运行次数:0
运行
复制
let arr=[1,[2,[3,4,5]]];
function flatten(arr){
	let result=[];
	for(let i=0;i<arr.length;i++){
		if(Array.isArray(arr[i]){
			result=result.concat(flatten(arr[i]);
		}else{
			result.push(arr[i]);
		}
	}
	return result;
}
flatten(arr);// [1,2,3,4,5]

方法二:reduce函数递归

从上面的普通的递归函数中可以看出,其实就是对数组的每一项进行处理,那么其实也可以用reduce来实现数组的拼接,从而简化第一种方式的代码

代码语言:javascript
代码运行次数:0
运行
复制
let arr=[1,[2,[3,4,5]]];
function flatten(arr){
	return arr.reduce(function(prev,next){
		return prev.concat(Array.isArray(next)?flatten(next):next)
	},[])
}
flatten(arr);// [1,2,3,4,5]

方法三:拓展运算符实现

这个方法的实现,采用了拓展运算符和some的方法,两者共同使用,达到数组扁平化的目的

代码语言:javascript
代码运行次数:0
运行
复制
let arr=[1,[2,[3,4,5]]];
function flatten(arr){
	while(arr.some(itme=>Array.isArray(item))){
		arr=[].concat(...arr);
	}
	return arr;
}
flatten(arr);// [1,2,3,4,5]

方法四:split和toString

可以通过split和toString两个方法来共同实现数组扁平化,由于数组会默认带一个toString方法,所以可以把数组直接转换成逗号分隔的字符串,然后再用split方法把字符串重新转换为数组。

代码语言:javascript
代码运行次数:0
运行
复制
let arr=[1,[2,[3,4,5]]];
function flatten(arr){
	return arr.toString().split(',');
}
flatten(arr);// [1,2,3,4,5]

方法五:ES6中的flat

flat方法的语法:arr.flat([depth]),其中depth是可以传递数组的展开深度(默认不填,数值为1),即展开一层数组。如果层数不确定,参数可以传进Infinity,代表不论多少层都要展开;

代码语言:javascript
代码运行次数:0
运行
复制
let arr=[1,[2,[3,4,5]]];
function flatten(arr){
	return arr.flat(Infinity);
}
flatten(arr);// [1,2,3,4,5]

方法六:正则和JSON方法

先用JSON.stringify的方法转换为字符串,然后通过正则表达式过滤掉字符串中的数组的方括号,最后再利用JSON.parse把它转换成数组

代码语言:javascript
代码运行次数:0
运行
复制
let arr=[1,[2,[3,4,5]]];
function flatten(arr){
	let str=JSON.stringify(arr);
	str=str.replace(/(\[|\])/g,'');
	str='['+str+']';
	return JSON.parse(str);
}
flatten(arr);// [1,2,3,4,5]
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-04-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 🧐 什么是数组扁平化
  • 🤔 为什么要数组扁平化
  • 😎 如何进行数组扁平化
    • 方法一:递归实现
    • 方法二:reduce函数递归
    • 方法三:拓展运算符实现
    • 方法四:split和toString
    • 方法五:ES6中的flat
    • 方法六:正则和JSON方法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档