1. 程式人生 > >javascript實現Map(覆蓋所有功能)

javascript實現Map(覆蓋所有功能)

function HashMap() {
	// 定義長度
	var length = 0;
	// 建立一個物件
	var obj = new Object();

	/**
	 * 判斷Map是否為空
	 */
	this.isEmpty = function() {
		return length == 0;
	};

	/**
	 * 判斷物件中是否包含給定Key
	 */
	this.containsKey = function(key) {
		return (key in obj);
	};

	/**
	 * 判斷物件中是否包含給定的Value
	 */
	this.containsValue = function(value) {
		for ( var key in obj) {
			if (obj[key] == value) {
				return true;
			}
		}
		return false;
	};

	/**
	 * 向map中新增資料
	 */
	this.put = function(key, value) {
		if (!this.containsKey(key)) {
			length++;
		}
		obj[key] = value;
	};

	/**
	 * 根據給定的Key獲得Value
	 */
	this.get = function(key) {
		return this.containsKey(key) ? obj[key] : null;
	};

	/**
	 * 根據給定的Key刪除一個值
	 */
	this.remove = function(key) {
		if (this.containsKey(key) && (delete obj[key])) {
			length--;
		}
	};

	/**
	 * 獲得Map中的所有Value
	 */
	this.values = function() {
		var _values = new Array();
		for ( var key in obj) {
			_values.push(obj[key]);
		}
		return _values;
	};

	/**
	 * 獲得Map中的所有Key
	 */
	this.keySet = function() {
		var _keys = new Array();
		for ( var key in obj) {
			_keys.push(key);
		}
		return _keys;
	};

	/**
	 * 獲得Map的長度
	 */
	this.size = function() {
		return length;
	};

	/**
	 * 清空Map
	 */
	this.clear = function() {
		length = 0;
		obj = new Object();
	};

	/**
	 * 遍歷map
	 */
	this.each = function(fn) {
		for ( var key in obj) {
			fn(key, obj[key]);
		}
	};

	/**
	 * map轉為字串
	 */
	this.toString = function() {
		var str = "{";
		for ( var k in obj) {
			str += "\"" + k + "\" : \"" + obj[k] + "\",";
		}
		str = str.substring(0, str.length - 1);
		str += "}";
		return str;
	}
}
例子:
var map = new HashMap();
map.put("a","aa");
map.put("b",1);
map.put("c",true);
map.each(function (key, value) {
    console.log(key+" = "+value);
});