**【题目】**将嵌套多层数组转换成只有一层的数组
**【描述】**实现一个函数 flatten(arr),将一个嵌套多层的数组(数组中可能还有其他数据类型)转换成一个只有一层的数组,并且元素顺序保持不变
例如
flatten([1, [2], [3, [[4]]]]) // [1, 2, 3, 4]
flatten([1, 2, [3, 4], 5, [6, [7, 8, [9]]]]) // [1, 2, 3, 4, 5, 6, 7, 8, 9]
【答案】
function flatten(arr) {
let result = [];
function helper(arr) {
arr.forEach(item => {
if (Array.isArray(item)) {
helper(item);
} else {
result.push(item);
}
});
}
helper(arr);
return result;
}
flatten([1, [2], [3, [[4]]]]) // [1, 2, 3, 4]
flatten([1, 2, [3, 4], 5, [6, [7, 8, [9]]]]) // [1, 2, 3, 4, 5, 6, 7, 8, 9]
这个解法使用了递归来遍历嵌套的数组。对于输入的数组,我们定义了一个辅助函数 helper,它会遍历数组中的每个元素。如果当前元素是数组,则递归调用 helper 函数继续处理;如果当前元素不是数组,则将其加入结果数组 result 中。
最后,返回结果数组 result。
注意,在实际面试过程中,答案可能有多种实现方式,上述只是其中一种可能的解决方案。在回答问题时,重要的是能够清晰地表达思路和解决方法,并且能够通过编写代码来实现。