JavaScript 是一種客戶端腳本語言,常用于 Web 開發。在 JavaScript 中,向量(vector)是一種極具實用性的數據結構。向量可以看作是一維數組,其中的元素可以是任意類型。與數組不同的是,向量可以自動按需擴展大小,這使得處理非固定長度數據集的工作極為方便。
比方說,如果要統計一段文章中出現最多的單詞,我們可以使用一個對象來記錄每個單詞出現的次數。但問題在于,我們無法提前知道這段文章中會出現多少個不同的單詞,因此無法確定對象的大小。如果使用數組來記錄元素數量,又會因為取下標的方式特別繁瑣。這時候我們就可以使用向量:
let words = new Vector(); words.push("hello"); words.push("world"); words.push("hello"); words.push("hello"); console.log(words.count("hello")); // 輸出 3 console.log(words.indexOf("world")); // 輸出 1上述代碼中,我們首先創建了一個空的向量。然后使用 push 方法,將一些字符串元素添加到向量中。由于向量是可變長度的,我們不必在 push 前預先指定其長度。最后,我們使用 count 和 indexOf 方法來統計向量中某個元素的出現次數和位置。 向量的擴容機制也十分巧妙。當向量內存不足以存儲新增元素時,它會自動重新分配一段更大的內存來存儲更多的元素。這一過程被稱為向量的「增量式擴容」,通常采用倍增法,即每次新分配的內存空間是原來空間的兩倍。這樣一來,隨著向量大小的增長,擴容的次數就會減少,空間使用也會更加高效。
let nums = new Vector(); console.log(nums.capacity); // 輸出 16 for (let i = 0; i< 20; i++) { nums.push(i); } console.log(nums.capacity); // 輸出 32 console.log(nums.size()); // 輸出 20上述代碼中,我們首先創建了一個空的向量,默認大小為 16。然后使用 push 方法,向向量中添加了 20 個數字元素。由于向量大小已經超過了 16,因此它自動重新分配了一段更大的內存。這一操作被反映在 capacity 屬性上,該屬性表示當前向量可以存儲多少個元素而不需要再次擴容。 需要注意的是,向量的擴容雖然會使得空間使用更高效,但同時也帶來了一些額外的開銷。每次擴容都需要重新分配內存空間,并將原來的元素復制到新的內存中。因此,在實現向量的算法時,需要權衡時間和空間的消耗。 一個向量還擁有許多其他函數,可以用來增刪改查元素、遍歷向量等。比如,我們可以使用 foreach 函數來對向量中的每個元素進行操作:
let data = new Vector(); for (let i = 0; i< 10; i++) { data.push(Math.floor(Math.random() * 100)); } data.foreach(function (item) { console.log(item); });上述代碼中,我們創建了一個長度為 10 的向量,并使用 Math.random 函數生成了 10 個隨機的整數。然后使用 foreach 方法,對向量中的每個元素進行了輸出操作。 向量作為 JavaScript 中的一種數據結構,可以為我們的開發提供極大的便利。通過合理的使用向量,我們能夠更加高效、優雅地處理一些復雜的數據結構和算法問題。