js实现数组扁平化函数Array.flat
/**
* @param {any[]} arr
* @param {number} depth
* @return {any[]}
*/
var flat = function (arr, n) {
let ans = []
arr.map((v,i)=>{
let temp = n
if(temp===0||!Array.isArray(v)){
ans.push(v)
return;
}
ans.push(...flat(v,n-1))
})
return ans
};
测试结果:
const arr1 = [1, 2, [3, 4, [5, 6]]];
const depth1 = 1;
console.log(flat(arr1, depth1));
// 输出: [1, 2, 3, 4, [5, 6]]
const arr2 = [1, [2, [3, [4, [5]]]]];
const depth2 = 3;
console.log(flat(arr2, depth2));
// 输出: [1, 2, 3, 4, [5]]
实现原理:
-
函数接受两个参数,
arr
表示待展平的数组,n
表示展平的深度。 -
创建一个空数组
ans
,用来保存展平后的结果。 -
使用
arr
的map
方法遍历数组中的每一个元素,其中的回调函数接受两个参数,v
表示当前元素的值,i
表示当前元素的索引。 -
在回调函数中,首先将
n
的值赋给一个临时变量temp
,用来记录当前的展平深度。 -
判断
temp
是否为 0 或者当前元素v
是否为数组,如果是,则将当前元素v
直接放入结果数组ans
中,并通过return
语句退出当前回调函数的执行。 -
如果
temp
不为 0 且当前元素v
是数组,则通过递归调用flat
函数,并将当前元素v
作为新的输入数组,同时将n-1
作为新的展平深度传入递归函数中,将递归结果通过扩展运算符...
添加到结果数组ans
中。 -
最后,返回结果数组
ans
,其中保存了展平后的数组。
总的来说,这个函数通过递归的方式遍历多维数组,并根据指定的展平深度将多维数组展平成一维数组,并返回结果数组。