方法 1:递归实现(最易理解,适合新手)
递归的核心思路是:遍历数组的每一个元素,如果元素是数组,就继续递归处理这个子数组;如果不是数组,就直接加入结果数组。
// 递归实现数组扁平化(可指定扁平化深度,默认完全扁平化)
function flattenArray(arr, depth = Infinity) {
// 存储最终扁平化结果
const result = [];
// 遍历原数组的每一个元素
arr.forEach(item => {
// 判断:如果当前元素是数组,且还没达到指定扁平化深度
if (Array.isArray(item) && depth > 0) {
// 递归处理子数组,深度减 1
result.push(...flattenArray(item, depth - 1));
} else {
// 非数组元素直接加入结果
result.push(item);
}
});
return result;
}
// 测试用例
const nestedArr = [1, [2, [3, [4, 5]], 6], 7];
// 完全扁平化
console.log(flattenArray(nestedArr)); // [1, 2, 3, 4, 5, 6, 7]
// 只扁平化 1 层
console.log(flattenArray(nestedArr, 1)); // [1, 2, [3, [4, 5]], 6, 7]
关键解释:
Array.isArray(item):判断元素是否为数组,这是扁平化的核心判断条件;

