TL:DR
除了使用 convent 数组辅助函数(理论上我可以为对象创建),并考虑到对象查找的性能优势,还有什么理由使用数组而不是对象?
对象
据我了解,由于JavaScript对象使用哈希表来查找它们的键->数据对,因此无论对象的长度如何,查找时间都非常小。
例如,如果我想要一个非常快速的字典查找,过去我(我们可以压缩语法,但这不是重点)将字典数据存储为 JSON
"apple" : "apple",
然后使用
if (Dictionary.apple) console.log("Yep it's a word!");
无论我的字典包含 30,000 个单词还是 300,000 个单词,结果返回的速度都非常快。
数组
另一方面,除非我知道数组项所附加的编号,否则我必须循环遍历整个数组,导致项目在列表中的位置越靠前,查找时间就越长。
我知道使用数组的好处是我可以访问方便的函数,例如 slice
,但这些可能是为了与对象一起使用而创建的。
我的问题
因此,考虑到对象的查找效率,我目前在每种情况下都会选择对象而不是数组。但我很容易在这一点上犯错。
除了使用 convent 数组辅助函数(理论上我可以为对象创建),并考虑到对象查找的性能优势,还有什么理由使用数组而不是对象?强>
最佳答案
您在这里将苹果与橙子进行比较。如果您需要从任意字符串键映射到值(如示例中的“apple”),那么您可以使用对象。 (在 ES2015 中,您可能也可以使用 Map 实例。)
如果您有一大堆橙子,并且希望将它们保存在从 0 开始编号的列表中,则可以将橙子放入数组中,并按您想要的(编号)橙子进行索引。
无论对象是普通对象实例还是数组实例,在对象上定位属性的过程都是相同的。在现代 JavaScript 运行时环境中,可以安全地假设查找数字索引数组属性的过程经过适当优化,甚至比任意字符串命名属性的哈希查找更快。然而,这与您需要完成的工作的性质和数据结构的选择是完全不同的问题。要么您有一个事物列表,列表中事物的顺序就是它们之间的显着关系,要么您已经命名需要通过这些名称访问的事物。这两种情况在概念上是不同的。
关于javascript - 使用数组而不是对象来存储辅助函数以外的列表的原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32378190/