js實現(xiàn)hashtable的賦值、取值、遍歷操作實例詳解
本文實例講述了js實現(xiàn)hashtable的賦值、取值、遍歷操作。分享給大家供大家參考,具體如下:
哈希表(Hashtable)這個概率應(yīng)該是#c里面的概念,用來賦值、取值、遍歷、排序操作提高效率。想起這個東西其實使我們以前經(jīng)常遇到這樣的面試題,一個很大的數(shù)組可能有100000個,如何快速知道它里面的出現(xiàn)最多的次數(shù),那么這里我們可能就要用Hashtable的相關(guān)知識了。Javascript中,object的實現(xiàn)就是hash表,因此只要在object上封裝點方法,再利用原生的hasOwnProperty方法就可以實現(xiàn)簡單高效的hashtable。
一、什么是哈希表(Hashtable)
二、哈希表的簡單操作
三、js模擬哈希表的簡單操作
一、什么是哈希表(Hashtable)
Framework中,Hashtable是System.Collections命名空間提供的一個容器,用于處理和表現(xiàn)類似key/value的鍵值對,其中key通常可用來快速查找,同時key是區(qū)分大小寫;value用于存儲對應(yīng)于key的值。Hashtable中key/value鍵值對均為object類型,所以Hashtable可以支持任何類型的key/value鍵值對。

二、哈希表的簡單操作C#
在哈希表中添加一個key/value鍵值對:
HashtableObject.Add(key,value);
在哈希表中去除某個key/value鍵值對:
HashtableObject.Remove(key);
從哈希表中移除所有元素:
HashtableObject.Clear();
判斷哈希表是否包含特定鍵key:
HashtableObject.Contains(key);
三、js模擬哈希表的簡單操作
HashTable.prototype = {
contructor:HashTable,
//初始化
initialize:function(){
this.obj = {};
},
//獲取hashTable中對象唯一出現(xiàn)的次數(shù)
count:function(){
var count = 0;
for(var i in this.content) count++;
return count;
},
//返回hashTable中的值
items:function(key){
if(this.contains(key)){
return this.obj[key];
}
},
//增加值到hashtable
add:function(key,value){
if(this.obj.hasOwnProperty(key)){
return false;
}else{
this.obj[key] = value;
return true;
}
},
//清空hashtable中的值
clear:function(){
this.obj = {};
},
//檢測hashTable對象中是否含有此屬性
contains:function(key){
return this.obj.hasOwnProperty(key);
},
//移除hashTable中對象的值
remove:function(key){
delete this.obj[key];
}
}
這樣我們就能像c#語言里面的那樣進(jìn)行操作了。
還一個簡單的變體版:
// js哈希表
function HashTable() {
this.ObjArr = {};
this.Count = 0;
//添加
this.Add = function(key, value) {
if (this.ObjArr.hasOwnProperty(key)) {
return false; //如果鍵已經(jīng)存在,不添加
}else {
this.ObjArr[key] = value;
this.Count++;
return true;
}
}
//是否包含某項
this.Contains = function(key) {
return this.ObjArr.hasOwnProperty(key);
}
//取某一項 其實等價于this.ObjArr[key]
this.GetValue = function(key){
if (this.Contains(key)) {
return this.ObjArr[key];
}else {
throw Error("Hashtable not cotains the key: " + String(key)); //腳本錯誤
//return;
}
}
//移除
this.Remove = function(key) {
if (this.Contains(key)) {
delete this.ObjArr[key];
this.Count--;
}
}
//清空
this.Clear = function(){
this.ObjArr = {}; this.Count = 0;
}
}
//員工
function employee(id, userName) {
this.id = id;
this.userName = userName;
}
function test() {
var ht = new HashTable();
var tmpEmployee = null;
for (var i = 1; i < 6; i++) {
tmpEmployee = new employee(i, "Employee_" + i);
ht.Add(i, tmpEmployee);
}
for (var i = 1; i <= ht.Count; i++) {
alert(ht.GetValue(i).userName); //其實等價于ht.ObjArr[i].userName
//alert(ht.ObjArr[i].userName);
}
ht.Remove(1);
alert(ht.Contains(1)); //false
alert(ht.Contains(2)); //true
//alert(ht.GetValue(1)); //異常
var result = ht.GetValue(2);
if (result != null) {
alert("Employee Id:" + result.id + ";UserName:" + result.userName);
}
ht.Add(2, "這一個key已經(jīng)存在!"); //Add無效
//ht.Clear(); //清空
alert(ht.Count);
}
最后解決一下,開頭說的那個問題
Array.prototype.maxNum = function(){
var arr = this,obj={};
for(var i =0, len=arr.length;i<len;i++){
var key = arr[i];
if( ! obj[key]){
obj[key] = 1;
}else{
obj[key]++;
}
}
var max = -1,maxStr;
for( key in obj){
if(obj[key]>max){
max = obj[key];
maxStr = key;
}
}
//alert(maxStr);
return [maxStr,max];
}
PS:這里再為大家提供幾款hash操作相關(guān)工具供大家參考使用:
在線散列/哈希算法加密工具:
http://tools.jb51.net/password/hash_encrypt
在線MD5/hash/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160加密工具:
http://tools.jb51.net/password/hash_md5_sha
更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《JavaScript數(shù)組操作技巧總結(jié)》、《JavaScript排序算法總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》、《JavaScript數(shù)學(xué)運算用法總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript查找算法技巧總結(jié)》及《JavaScript錯誤與調(diào)試技巧總結(jié)》
希望本文所述對大家JavaScript程序設(shè)計有所幫助。
相關(guān)文章
基于JavaScript偽隨機(jī)正態(tài)分布代碼實例
這篇文章主要介紹了基于JavaScript偽隨機(jī)正態(tài)分布代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-11-11
javascript實現(xiàn)Email郵件顯示與刪除功能
這篇文章主要介紹了javascript實現(xiàn)Email郵件顯示與刪除功能,需要的朋友可以參考下2015-11-11

