在 Javascript 中使用 Map over Object 有啥缺点吗?

Posted

技术标签:

【中文标题】在 Javascript 中使用 Map over Object 有啥缺点吗?【英文标题】:Is there any disadvantage of using Map over Object in Javascript?在 Javascript 中使用 Map over Object 有什么缺点吗? 【发布时间】:2018-09-01 20:46:05 【问题描述】:

相比 ES6 的 Map(),使用 Object 有什么明显的好处吗?我喜欢将它用于forEach 函数。在需要哈希表时选择Map() 是不是一种不好的做法?

【问题讨论】:

【参考方案1】:

javascript 上下文中 ObjectMap 的情况更多的是一个问题,即您是否需要通用或专用工具来完成这项工作。

Map 实际上只是一种特殊类型的对象(就像您将在应用程序中构造的任何其他类型的对象一样。您甚至可以创建自己的 Map() 构造函数来模仿 ES6 映射)。与其他对象一样,它具有访问其功能的方法。 Map 的“特长”是高效的键值存储。

另一方面,Object 是 Javascript 的原生数据类型之一,可用于多种用途(Map 就是其中之一)。它不是为任何一种目的而“专门”的。

所以,总而言之:

如果您使用Map 作为高效的哈希表,去吧!这就是它的目的。 如果您将 Map 用于键值存储以外的任何内容(或者,如您所说,只是因为 forEach 方法),您可能需要重新考虑使用它来支持更合适的数据结构(可能是也可能不是普通的旧对象)

【讨论】:

...反之亦然 - 如果您将对象用作哈希表,请停止这样做!【参考方案2】:

MDN 上有一个很好的解释,说明何时以及为什么更喜欢 Map 而不是 Object

总结一下:

Map 具有有用的属性、实用功能并且是可迭代的,这 与使用 Object 相比,可以节省一些写作时间(例如在尝试查找键值对的数量时) Map 在密集的键值操作(添加、删除)中性能更高 Map 可防止您的键与预定义对象的原型属性之间发生不必要的冲突 Map 可以使用对象作为键

【讨论】:

以上是关于在 Javascript 中使用 Map over Object 有啥缺点吗?的主要内容,如果未能解决你的问题,请参考以下文章

我如何使用 GroupBy 而不是 Map over Dataset?

为啥 map over 一个 iterable 返回一个一次性的 iterable?

[Immutable,js] Iterating Over an Immutable.js Map()

How to Iterate Over a Map in Java?

Google Maps API v3 中的 OVER_QUERY_LIMIT:如何在 Javascript 中暂停/延迟以减慢速度?

[React] Cleanly Map Over A Stateless Functional Component with a Higher Order Component