数组扁平化

多维数组转化成一维数组

最近正在面试,遇到的一些自己不太清晰的题目所以小记一下,同时刷题前,先确定好关键点再去做这样的途径才好些。例子🌰:

1
var a = [1,3,4,5,[6,7,9],[2],[5]];

关键点就是先把数组转化为字符串,之后再把字符串转化成数组,以此达到把多维数组转化为一维数组的目的。

方法一: 使用join()和split()

join() 方法用于把数组中的所有元素放入一个字符串,split() 方法用于把一个字符串分割成字符串数组。

1
a = a.join(",").split(",");

相信这种方法大家都知道,也是比较常见的一种方法。

方法二: 使用toString()

toString() 方法可把一个逻辑值转换为字符串,并返回结果。

1
a = a.toString().split(",");

方法三: 使用空字符串

1
a = (a+'').split(',');

方法四: 使用concat()

1
[].concat.apply([], a);

这种方法是新增一个数组利用concat()把数组拍平成一维数组。

方法五: 使用递归和concat方法

1
2
3
4
5
6
7
8
9
10
11
12
let flatten = target => {
let result = [];
target.forEach( (item) => {
if (Array.isArray(item)) {
result = result.concat(flatten(item));
}
else {
result.push(item);
}
});
return result;
}

总结

以上的四种方法除了第五种都是一个原理,先把数组转化为字符串,然后在对字符串进行操作,最终达到把多维数组中的数据转化为一维数组的目的。同时这种做法我在vue源码中也见过,大概有个猜测是干嘛的,具体还是得去看下。。