在 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 上下文中 Object
与 Map
的情况更多的是一个问题,即您是否需要通用或专用工具来完成这项工作。
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