1.数组扁平化
数组扁平化,实际上就是将多维数组转换成一维数组
例如[1,2,[3,4,[5,6,[7,8]]]]->[1,2,3,4,5,6,7,8]
2.方法一:
Array.prototype.flat()用于将嵌套的数组“拉平”,变成一维数组。该方法返回一个新数组,对原数据没有影响。
flat()默认只会“拉平”一层,如果想要“拉平”多层的嵌套数组,可以将flat()方法的参数写成一个整数,表示想要拉平的层数,默认为1。
如果不管有多少层嵌套,都要转成一维数组,可以用Infinity关键字作为参数。
arr = arr.flat(Infinity)
3.方法二:
Array.prototype.join()用于将数组转换成字符串,再用String.prototype.split()将字符串转换成数组(转换成的数组每一项都是字符串,我们可以循环将每一项转换成数字)
arr = arr.join(',').split(',').map(item => Number(item));
4.方法三:
递归+for
function flatten(arr) {
var res = [];
for(let i = 0, length = arr.length; i < length; i++) {
if(Array.isArray(arr[i])) {
res = res.concat(flatten(arr[i])); //concat 并不会改变原数组
} else{
res.push(arr[i]);
}
}
return res;
}
5.方法四:
while
function flatten(arr) {
while(arr.some(item => Array.isArray(item))) {
arr = [].concat(...arr);
}
return arr;
}
6.方法五:
reduce
function flatten(arr) {
return arr.reduce((prev,cur) =>{
return prev.concat(Array.isArray(cur)? flatten(cur) : cur);
},[]);
}