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