簡體   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