javascript中類比hashtable對數組進行快速尋找
面對一個數組,有時候希望能夠直接存取一個特定元素,而不是對整個數組迴圈來尋找該元素。想想C#中的查詢方便的Hashtable,javascript可以類比該技術以實現對數組的快速尋找。
在javascript中,array被視作一個對象,這樣就可以為其定義屬性(property)而且不會影響數組中的原有資料。屬性可以通過其名稱進行引用。
實現的關鍵:對一個已存在的數組,我們必須為其每個元素產生一個唯一標識值,這樣才能有效得訪問到所有元素。
作為樣本,首先建立一個自訂對象employee, 有兩個屬性name和age。
function employee(name, age)
{
this.name = name;
this.age = age;
}
建立數組:
var employees = new Array();
employees[employees.length] = new employee("Anders", 25);
employees[employees.length] = new employee("Andrew", 27);
employees[employees.length] = new employee("Bill", 45);
類比hashtable:
for(var i = 0; i < employees.length; i++)
{
employees[employees[i].name] = employees[i];
}
這裡用employees[i]的name屬性作為hashtable的key,employees[i]作為value,這樣就可以通過name進行快速尋找;
比如:var BillsAge = employees["Bill"].age;
注意:上面定義的數組中,很難避免會出現兩個name重複的元素,那麼這時就會出現問題,後加的對象會覆蓋掉原來的對象。所以要盡量保證用作hashtable的key的變數值的唯一性,這樣才能保證訪問到每一個元素。如果對象的一個屬性不能保證唯一性,可以考慮多個屬性的合并值。