闲来无事,做个JavaScript练习题,结果因为Java语言使用的时间久了,就像强迫使用Java的逻辑去写JavaScript代码。然而,JavaScript却没有HashMap,瞬间感觉Java不愧是高级语言。
为了成全自己的强迫症,简单实现个Map用着嗨一下。
废话就不多说了,贴出来我的代码,大家给指导指导。
/**
* 自定义键值对字典对象
* @constructor
*/
function Dictionary() {
/**
* 键值对的键列表,存储键元素
* @type {Array}
*/
var keys = new Array();
/**
* 键值对的值列表,存储值元素
* @type {Array}
*/
var values = new Array();
/**
* 为键值对添加一个元素
* @param key 元素键(具有唯一性)
* @param value 元素的值
*/
this.put = function (key, value) {
if (contains(key)) { // 已存在键为key的元素
var index = this.indexOfKey(key);
values[index] = value; // 为对应的值重新赋值
} else { // 不存在键为key的元素,需要为键值对添加新的元素
keys.push(key); // 添加key到键列表的末尾
values.push(value); // 添加value到值列表的末尾
}
};
/**
* 获取key对应的value
* @param key
* @returns {*} 返回value值,查不到返回null
*/
this.get = function (key) {
if (contains(key)) { // 存在键为key的元素
var index = this.indexOfKey(key);
return values[index]; // 返回key对应的value
} else {
return null;
}
};
/**
* 获取key数组
* @returns {Array}
*/
this.getKeyArray = function () {
return keys;
};
/**
* 获取vakue数组
* @returns {Array}
*/
this.getValueArray = function () {
return values;
};
/**
* 返回键值对的长度
* @returns {Number}
*/
this.size = function () {
return keys.length;
};
/**
* 检查是否包含某个key的元素
* @param key
* @returns {boolean} 包含返回true
*/
this.contains = function (key) {
return (keys.indexOf(key) > -1);
};
/**
* 获取key列表对应元素的下表
* @param key key
* @returns {number} 下标位置,查不到返回-1
*/
this.indexOfKey = function (key) {
return keys.indexOf(key);
};
}
以上,本人技术 有限,忘大神路过给指点一二。谢谢!