MST

星途 面试题库

面试题:JavaScript 数组元素读写的高级难度问题

假设在一个复杂的JavaScript应用场景中,有一个嵌套数组,其深度不定,每个子数组可能又包含子数组,且数组元素有数字、字符串等不同类型。要求编写一个高效的函数,能够读取所有数值类型的元素,并按照原顺序写入到一个新的一维数组中,同时要考虑性能优化,避免不必要的循环和内存开销,阐述你的实现思路和优化点。
20.6万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试

实现思路

  1. 使用递归的方式遍历嵌套数组。递归可以方便地处理任意深度的嵌套结构。
  2. 对于数组中的每一个元素,判断其是否为数组。如果是数组,则递归调用函数处理该子数组;如果不是数组且为数值类型,则将其添加到结果数组中。

优化点

  1. 减少不必要的循环:采用递归方式直接处理嵌套结构,避免使用多层循环去处理未知深度的数组。
  2. 内存开销控制:尽量避免在递归过程中创建过多的中间变量,结果数组在函数一开始创建后,后续只是往其中添加元素,没有频繁创建和销毁大量临时数组。

代码实现

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;
}