将具有唯一id的对象集合存储为以id作为键的关联数组,而不是作为常规数组,是否存在缺陷?

Are there any pitfalls to storing collections of objects with unique ids as an associative array with ids as keys, rather than as a regular array?

本文关键字:数组 id 常规 是否 缺陷 存在 存储 集合 对象 唯一 关联      更新时间:2023-09-26

我一直遵循Backbone Collection的约定,即拥有数据对象数组并使用_。find/findWhere等来循环遍历数组,即使我没有使用Backbone。然而,如果我知道它们将是唯一的,那么将它们存储为带有id作为键的关联数组似乎会更有效。这里面有我没发现的陷阱吗?

所以基本上:

var map = {};
map["someId"] = someObject;
map["someOtherId"] = someOtherObject;
// ...later to get the object:
var o = map["someId"];

如果是这样,那么"are there any traps…"我没有看到"是"否":查找对象的属性是一个非常常见的操作,JavaScript引擎做得非常快。

实际上,由于普通JavaScript数组根本不是真正的数组,因此明显以这种方式查找东西比将它们存储在数组中并使用forEach或类似的方法查找它们更有效。每次你从数组中获得一个条目(例如,a[0]或其他),这是一个属性访问操作,就像在对象中查找属性一样。(事实上,这就是,除非JavaScript引擎知道它可以优化操作。)从一个新类型数组中获取元素会更快,因为它们确实是数组(尽管搜索它们仍然很重要),但从标准数组中获取元素是对对象的属性查找,因此您不妨只进行一次查找(在映射中,使用键)。


(旁注:在JavaScript中,术语"关联数组"通常不使用。它只是一个物体。有时你也会听到"map"