【每日一题】将嵌套多层数组转换成只有一层的数组

82 阅读1分钟

**【题目】**将嵌套多层数组转换成只有一层的数组

**【描述】**实现一个函数 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。

注意,在实际面试过程中,答案可能有多种实现方式,上述只是其中一种可能的解决方案。在回答问题时,重要的是能够清晰地表达思路和解决方法,并且能够通过编写代码来实现。