将具有唯一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?
我一直遵循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"
相关文章:
- 根据id将json数组组合为一个json数组
- 将当前用户的 ID 推送到 meteorjs 中集合/文档的内部数组
- 如何循环通过2个对象数组并通过匹配id进行合并
- 保存id数组's而不是对象
- 将对象数组与id数组进行比较
- 通过匹配id映射2数组
- 使用Javascript向ID数组发送通知时出现Facebook访问令牌错误
- 如何将id数组与带下划线的对象数组嵌套属性进行比较
- 如何在具有相同 ID 的 Javascript 中按排序函数对关联数组进行排序
- node.js使用monk从数组中按id获取文档
- 我想使用Javascript中的循环在HTML中的特定id中显示数组中的多个对象
- 在不重构Mongo数据库的情况下,更新嵌入数组中的具有给定ID的对象
- 从子输入中获取id值,并在更改时将其推送到Javascript中的数组中
- 使用 id 和 Javascript 从数组中删除项目
- 将所有带有 id like 的元素放入数组中
- 从 js 函数中的数组 id 中检索值
- 处理重复表单字段集 (regex) 中数组 ID 的递增数
- 不能用动态数组id从流星表单更新mongo值
- 数组(id).方法不工作
- 带有动态/数组ID的Javascript函数