实现思路
- 使用递归的方式遍历嵌套数组。递归可以方便地处理任意深度的嵌套结构。
- 对于数组中的每一个元素,判断其是否为数组。如果是数组,则递归调用函数处理该子数组;如果不是数组且为数值类型,则将其添加到结果数组中。
优化点
- 减少不必要的循环:采用递归方式直接处理嵌套结构,避免使用多层循环去处理未知深度的数组。
- 内存开销控制:尽量避免在递归过程中创建过多的中间变量,结果数组在函数一开始创建后,后续只是往其中添加元素,没有频繁创建和销毁大量临时数组。
代码实现
function flattenNumbers(arr) {
const result = [];
function recursiveFlatten(subArr) {
for (let i = 0; i < subArr.length; i++) {
if (Array.isArray(subArr[i])) {
recursiveFlatten(subArr[i]);
} else if (typeof subArr[i] === 'number') {
result.push(subArr[i]);
}
}
}
recursiveFlatten(arr);
return result;
}