我正在为游戏构建一个实体系统,基本上我不确定是否应该使用简单的对象(字典)或数组来通过它们的 id 来存储实体/组件。
我最大的问题是我不想要动态实体 ID。如果 id 只是一个字符串(使用字典存储实体),那么它总是有效的,我可以使用 storage[id] 来获取该实体。
如果我使用数组,我想,表示存储数组中索引的实体的 id会改变。考虑这个实体数组:
[
Entity,
Entity, //This one is being removed.
Entity
];
如果我要删除该数组中的第二个实体,我认为访问第三个数组所需的 id 必须更改为(现已删除)第二个实体的 id(索引)。那是因为我考虑过删除splice()
ing。
但是,我可以使用delete
表达式将元素(实体)转换为undefined
! 而且,如果 Javascript 中的数组实际上只是对象,并且对象在逻辑上具有无限多的未定义值,这是否意味着数组中的未定义值不会占用内存?
最初,我认为数组的实现方式是它们在内存中对齐,并且索引只是从第一个元素的偏移量,并且按照这种逻辑,我认为未定义的值至少会使用指针的内存(因为我实际上认为指向元素的指针是对齐的,而不是元素本身)。
那么,如果我在这个数组中存储了 10k+ 个实体,并delete
编辑了其中的一半,那么 5kundefined
会使用任何内存吗?
另外,当我做一个for entity in array
循环时,这些未定义的元素会被传递吗?
另外,我在哪里可以找到资源来查看数组实际上应该如何在 Javascript 中实现?我所能找到的只是数组的一般解释和有关如何使用它们的教程,但我想了解这些在某些情况下可能很重要的小怪癖。像“Javascript quirks”这样的网站会很棒。