MST

星途 面试题库

面试题:JavaScript多维数组的内存优化与动态操作

假设有一个大型的三维数组,用于存储游戏地图数据,每个元素代表地图上某个位置的属性。由于内存限制,需要在不丢失数据的前提下,尽可能优化内存占用。并且要实现一个函数,能够动态增加某一层的新数据。请阐述优化策略,并编写JavaScript代码实现增加数据的功能。
34.1万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试

优化策略

  1. 数据类型优化:根据地图属性的取值范围,选择合适的最小数据类型。例如,如果地图属性只是0或1的标志位,可以使用Uint8Array(8位无符号整数)来存储,而不是默认的Number(64位浮点数)。
  2. 稀疏数组:如果地图数据存在大量相同值或者空值,可以考虑使用稀疏数组的方式存储。例如,使用一个对象来存储非默认值的位置及其对应的值,而不是使用完整的三维数组。
  3. 分块存储:将大型三维数组按一定规则分块存储,只在需要时加载相应的块,减少内存的常驻占用。

JavaScript代码实现增加数据功能

class GameMap {
    constructor(width, height, depth) {
        this.width = width;
        this.height = height;
        this.depth = depth;
        this.data = new Array(depth).fill(0).map(() => new Array(height).fill(0).map(() => new Array(width).fill(0)));
    }

    addLayer(newLayerData) {
        if (newLayerData.length !== this.height || newLayerData.some(row => row.length!== this.width)) {
            throw new Error('新数据的尺寸与地图尺寸不匹配');
        }
        this.data.push(newLayerData);
        this.depth++;
    }
}

// 示例使用
const map = new GameMap(10, 10, 5);
const newLayer = new Array(10).fill(0).map(() => new Array(10).fill(1));
map.addLayer(newLayer);