【问题标题】: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 的对象集合存储为以 id 作为键的关联数组而不是常规数组是否有任何陷阱?
【发布时间】:2013-05-22 07:38:15
【问题描述】:

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

【问题讨论】:

    标签: javascript arrays associative-array


    【解决方案1】:

    所以基本上:

    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 中,术语“关联数组”通常不使用。它只是一个对象。有时您还会听到“映射”。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-10
      • 1970-01-01
      • 1970-01-01
      • 2017-02-21
      • 2021-08-13
      • 1970-01-01
      • 2011-01-18
      • 1970-01-01
      相关资源
      最近更新 更多