【发布时间】:2013-05-22 07:38:15
【问题描述】:
我一直遵循 Backbone Collection 的约定,即拥有数据对象数组并使用 _.find/findWhere 等循环遍历数组,即使我没有使用 Backbone。但是,如果我知道它们将是唯一的,那么将它们存储为以 id 作为键的关联数组似乎会更有效。有什么我没有看到的陷阱吗?
【问题讨论】:
标签: javascript arrays associative-array
我一直遵循 Backbone Collection 的约定,即拥有数据对象数组并使用 _.find/findWhere 等循环遍历数组,即使我没有使用 Backbone。但是,如果我知道它们将是唯一的,那么将它们存储为以 id 作为键的关联数组似乎会更有效。有什么我没有看到的陷阱吗?
【问题讨论】:
标签: javascript arrays associative-array
所以基本上:
var map = {};
map["someId"] = someObject;
map["someOtherId"] = someOtherObject;
// ...later to get the object:
var o = map["someId"];
如果是这样,那么“是否有任何陷阱...我没有看到”的答案是“否”:查找对象的属性是一种非常常见的操作,JavaScript 引擎可以很快完成。
事实上,自从normal JavaScript arrays aren't really arrays at all 以来,明显以这种方式查找比将它们存储在数组中并使用forEach 或类似方法来查找它们更有效。每次从数组中获取条目(例如,a[0] 或其他)时,这就是属性访问操作,就像在对象中查找属性一样。 (事实上,正是它是什么,除非 JavaScript 引擎知道它可以优化操作。)从新的 typed arrays 之一获取元素更快,因为它们确实是数组(尽管搜索通过它们仍然很重要),但是从标准数组中获取元素是对对象的属性查找,因此您不妨只进行一次查找(在您的地图上,使用您的键)。
(旁注:在 JavaScript 中,术语“关联数组”通常不使用。它只是一个对象。有时您还会听到“映射”。)
【讨论】: