javascript - 使用数组而不是对象来存储辅助函数以外的列表的原因是什么?

标签 javascript arrays object

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/

相关文章:

java - 如何将String解析为对象

javascript - 如何在 Chrome 应用程序中保存多个文件

javascript - 如何以 24 小时格式比较 2 个时间,以检查 1 个时间是否早于另一个时间

javascript - 从显示的 Ajax 请求获取数据

java - java中的数组是按引用传递还是按值传递?

php - 转换包含单个键对象的数组

JavaScript 最佳实践原型(prototype)

javascript - 通过 Android javascript 接口(interface)从 HTML 传递图像

javascript - react : Call a function from inside render function

java - 多个不同对象的二维数组