扁平化数组
大约 1 分钟
扁平化数组
数组的扁平化就是将一个嵌套多层的数组转换为只有一层的数组,扁平化也是面试中常见的考题。举个简单的例子,假设有个名为 flatDeep 的函数能实现数组扁平化效果,代码运行效果如下面:
var array = [1, [2, [3, [4, 5]]]];
console.log(flatDeep(array)); // [1, 2, 3, 4,5]
方法一:递归 通过循环递归的方式,一项一项地去遍历数组,如果每一项还是一个数组,那么就继续往下遍历,实现方式,如下所示:
var array = [1, [2, [3, [4, 5]]]];
function flatDeep(arr){
let result = [];
for(let i = 0; i < arr.length; i++) {
if(Array.isArray(arr[i])){
result = result.concat(flatDeep(arr[i]))
} else {
result.push(arr[i])
}
}
return result;
}
console.log(flatDeep(array));
方法二:ES6的flat方法 flat() 方法会按照一个可指定的深度递归遍历数组,并将所有元素与遍历到的子数组中的元素合并为一个新数组返回。语法为:
var newArray = arr.flat([depth])
参数depth是指定要提取嵌套数组的结构深度,默认值为1。参数depth也可以传进 Infinity,代表不论多少层都要展开。用 flat 方法实现的扁平化代码效果如下:
var array = [1, [2, [3, [4, 5]]]];
function flatDeep(arr) {
return arr.flat(Infinity)
}
console.log(flatDeep(array)); // [ 1, 2, 3, 4, 5 ]