[英]object access vs array access in javascript
我有一系列数据,并且它的大小逐渐增加。 我想查找其ID的数据的特定行。 我有两个选择。 首先:创建一个数组,然后将每行添加到该数组中,每次我想要一行时,只需搜索数组中的项目或使用数组原型函数(查找)。 另一个选择是创建一个对象,每次出现新行时,只需将该行添加为属性(属性名称将为该行的ID)。 当我想查找一行时,只需通过其名称(Id)获取该对象的属性即可。 现在我想知道哪种选择是最有效的方法? (或者还有第三种选择?)
第一种选择:
const array = [
{
"Id":15659,
"FeederCode":169,
"NmberOfRepetition":1
},
{
"Id":15627,
"FeederCode":98,
"NmberOfRepetition":2
},
{
"Id":15557,
"FeederCode":98,
"NmberOfRepetition":1
}
]
每次出现新行时,都会将新行推入此数组。 访问: array.find(x => x.Id === 15659)
第二种选择:
const object = {
15659:{
"Id":15659,
"FeederCode":169,
"NmberOfRepetition":1
},
15627:{
"Id":15627,
"FeederCode":98,
"NmberOfRepetition":2
},
15557:{
"Id":15557,
"FeederCode":98,
"NmberOfRepetition":1
}
}
每次出现新行时,都会向该对象添加一个新属性。 访问: object[15659]
编辑:我读到某处,将新的属性添加到现有对象具有太多的成本。
如果您希望执行搜索操作,则应使用Object
,因为与Array
搜索相比,它提供了更好的性能。
Object
搜索的复杂度为O(1)
, Array
搜索的复杂度为O(n)
。 因此,要获得更好的性能,应使用Object
。
好吧,在第一个示例中,每次使用“查找”时,您都必须迭代数组。
在第二个示例中,无论其中有多少项,您都将直接访问属性,这将导致O(1)执行时间始终固定。 因此,为了获得更好的性能,您应该选择第二条路
从对象读取速度更快,并且需要O(1)时间,就像@NikhilAggarwal刚说的那样。 但是最近我正在阅读有关V8优化的内容,并希望进行检查,因此使用了基准js进行确认。
这是我的发现-
obj或arr中的条目数:100000
如果我们减少条目-对象的操作数几乎保持不变,但对数组则成倍增加。
obj或arr中的条目数:100
obj或arr中的条目数:10
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.