MST

星途 面试题库

面试题:JavaScript 数组创建在复杂数据结构嵌套场景下的应用

给定一个复杂的 JSON 数据结构,如下:`{ "mainArray": [ { "subArray1": [1, 2, 3], "subArray2": [4, 5, 6] }, { "subArray1": [7, 8, 9], "subArray2": [10, 11, 12] } ] }`。现在需要根据特定规则创建新的数组。规则是:如果 `subArray1` 中所有元素之和大于 `subArray2` 中所有元素之和,将 `subArray1` 放入一个新数组;否则,将 `subArray2` 放入新数组。请用 JavaScript 实现这个过程,详细解释你创建数组过程中的算法逻辑,以及如何优化代码性能以应对可能更大规模的复杂数据结构。
27.9万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试

代码实现

const complexJson = {
    "mainArray": [
        { "subArray1": [1, 2, 3], "subArray2": [4, 5, 6] },
        { "subArray1": [7, 8, 9], "subArray2": [10, 11, 12] }
    ]
};

function sumArray(arr) {
    return arr.reduce((acc, val) => acc + val, 0);
}

function createNewArray() {
    const newArray = [];
    for (const obj of complexJson.mainArray) {
        const sumSubArray1 = sumArray(obj.subArray1);
        const sumSubArray2 = sumArray(obj.subArray2);
        if (sumSubArray1 > sumSubArray2) {
            newArray.push([...obj.subArray1]);
        } else {
            newArray.push([...obj.subArray2]);
        }
    }
    return newArray;
}

const result = createNewArray();
console.log(result);

算法逻辑解释

  1. 计算数组元素和的函数 sumArray
    • 使用 Array.prototype.reduce 方法,它对数组中的每个元素执行一个由您提供的函数(reducer),将其结果汇总为单个返回值。
    • 初始值 acc 设为 0,val 是数组中的每个元素,通过 acc + val 累加,最终返回数组所有元素的和。
  2. 创建新数组的函数 createNewArray
    • 初始化一个空数组 newArray 用于存储结果。
    • 使用 for...of 循环遍历 complexJson.mainArray 中的每个对象。
    • 对于每个对象,分别计算 subArray1subArray2 的元素和 sumSubArray1sumSubArray2
    • 根据规则,如果 sumSubArray1 大于 sumSubArray2,将 subArray1 的拷贝(使用展开运算符 ... 确保是新数组,避免引用问题)添加到 newArray 中;否则,添加 subArray2 的拷贝。
    • 最后返回 newArray

性能优化

  1. 减少重复计算
    • 在原代码中,对每个对象的 subArray1subArray2 只计算一次和,避免了重复计算带来的性能开销。
  2. 避免不必要的内存分配
    • 使用展开运算符 ... 创建新数组时,确保只在必要时创建新的数组实例,而不是每次都对整个数组进行深拷贝(这里只是简单数组,不需要深拷贝)。
  3. 并行计算(适用于大规模数据)
    • 如果数据规模非常大,可以考虑使用 Web Workers(在浏览器环境)或并行处理库(如 paralleljs)将数组分块并行计算。例如,将 mainArray 分成多个小块,在不同的线程或进程中分别计算每个小块内的数组和并生成结果,最后合并这些结果。
  4. 使用更高效的数据结构(若适用)
    • 如果数据结构允许,在创建 JSON 数据时可以提前计算一些和值并存储,这样在后续处理时就不需要重复计算数组和,直接使用预计算的值进行比较。