繁体   English   中英

JavaScript中的对象访问与数组访问

[英]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

  1. 从Obj提取操作的次数: 47,174,859 ops / sec
  2. 数组搜索操作的次数: 612次操作/秒

如果我们减少条目-对象的操作数几乎保持不变,但对数组则成倍增加。

obj或arr中的条目数:100

  1. 从Obj提取操作的次数: 44,264,116个操作/秒
  2. 数组搜索操作的次数: 520,709 ops / sec

obj或arr中的条目数:10

  1. 从Obj提取操作的次数: 46,739,607 ops / sec
  2. 数组搜索操作的次数: 3,611,517 ops / sec

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM