`
aqbbsxiao
  • 浏览: 46068 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

js中实现Map

 
阅读更多
自己项目中用到了这个,记录下来,以便下次不用到处找
//***************************** Map javascript **************************

	function Map(linkItems) {
	    this.current = undefined; 
	    this._size = 0; 
	    if(linkItems === false){
	    	this.disableLinking(); 
	    } 
	}
	/**
	 * get currently map
	 * @return current object
	 */
	Map.noop = function() { 
	    return this; 
	}; 
	/**
	 * invalid operation
	 * @return
	 */
	Map.illegal = function() { 
	    throw new Error('invalid operation, the Map has been disable');
	}; 
	/**
	 * 
	 * @param obj
	 * @param foreignKeys
	 * @return
	 */
	Map.from = function(obj, foreignKeys) { 
	    var map = new Map; 
	    for(var prop in obj) { 
	        if(foreignKeys || obj.hasOwnProperty(prop)){
	        	map.put(prop, obj[prop]); 
	        } 
	    } 
	    return map; 
	}; 
	/**
	 * disable map
	 * @return
	 */
	Map.prototype.disableLinking = function() { 
	    this.link = Map.noop; 
	    this.unlink = Map.noop; 
	    this.disableLinking = Map.noop; 
	    this.next = Map.illegal; 
	    this.key = Map.illegal; 
	    this.value = Map.illegal; 
	    this.clear = Map.illegal; 
	    return this; 
	}; 
	/**
	 * return hash value eg: number 123
	 * @param value key/value
	 * @return
	 */
	Map.prototype.hash = function(value) { 
	    return (typeof value) + ' ' + (value instanceof Object ? (value.__hash || (value.__hash = ++arguments.callee.current)) : value.toString()); 
	}; 
	/**
	 * return map length
	 * @return
	 */
	Map.prototype.size = function() { 
	    return this._size;
	}; 

	Map.prototype.hash.current = 0; 
	/**
	 * get value by key
	 * @param key
	 * @return
	 */
	Map.prototype.get = function(key) { 
	    var item = this[this.hash(key)]; 
	    return item === undefined ? undefined : item.value; 
	}; 
	/**
	 * push the value into map
	 * @param key
	 * @param value
	 * @return
	 */
	Map.prototype.put = function(key, value) { 
	    var hash = this.hash(key); 
	    if(this[hash] === undefined) { 
	        var item = { key : key, value : value }; 
	        this[hash] = item; 
	        this.link(item); 
	        ++this._size; 
	    }else{
	    	this[hash].value = value;
	    } 
	    return this; 
	}; 
	/**
	 * delete value by key
	 * @param key
	 * @return
	 */
	Map.prototype.remove = function(key) { 
	    var hash = this.hash(key); 
	    var item = this[hash]; 
	    if(item !== undefined) { 
	        --this._size; 
	        this.unlink(item); 
	        delete this[hash]; 
	    } 
	    return this; 
	}; 
	/**
	 * clear map
	 * @return
	 */
	Map.prototype.clear = function() { 
	    while(this._size){
			this.remove(this.key()); 
		} 
	    return this; 
	}; 
	/**
	 * queue
	 * @param item
	 * @return
	 */
	Map.prototype.link = function(item) { 
	    if(this._size == 0) { 
	        item.prev = item; 
	        item.next = item; 
	        this.current = item; 
	    }else { 
	        item.prev = this.current.prev; 
	        item.prev.next = item; 
	        item.next = this.current; 
	        this.current.prev = item;
	    } 
	}; 
	Map.prototype.unlink = function(item) { 
	    if(this._size == 0){ 
	        this.current = undefined;
	    }else { 
	        item.prev.next = item.next; 
	        item.next.prev = item.prev; 
	        if(item === this.current){
	        	this.current = item.next; 
	        } 
	    } 
	}; 
	/**
	 * get next
	 * @return
	 */
	Map.prototype.next = function() { 
	    this.current = this.current.next; 
	    return this;
	}; 
	/**
	 * get current key
	 * @return
	 */
	Map.prototype.key = function() { 
	    return this.current.key; 
	}; 
	/**
	 * get current value
	 * @return
	 */
	Map.prototype.value = function() { 
	    return this.current.value; 
	}; 

	//***************************** Map javascript **************************
分享到:
评论

相关推荐

    在JavaScript中实现map对象

    ### 在JavaScript中实现Map对象 #### 一、引言 在JavaScript中,原生支持了多种数据结构,其中数组(Array)是最为常见的数据结构之一。然而,在某些应用场景下,我们可能需要一种能够根据键(key)快速查找值(value)的...

    JavaScript实现Array(数组)和Map

    与数组不同,Map的键是有序的,并且提供了几个方便的方法,如set(key, value)用于设置键值对,get(key)用于获取键对应的值,delete(key)用于删除键值对,size属性用于获取Map中键值对的数量。`map.js` 文件可能会...

    js 实现map的方式

    - `set(key, value)`: 向Map中添加一个键值对。 - `get(key)`: 通过键获取对应的值,如果键不存在则返回undefined。 - `has(key)`: 检查Map中是否存在指定的键。 - `delete(key)`: 删除指定键的键值对。 - `...

    利用js实现Map

    本文将深入探讨`Map`对象的原理、特性以及如何通过JavaScript实现`Map`的相关功能,并通过实例进行演示。 ### 1. Map的基本用法 创建一个`Map`对象非常简单,可以通过传入一个数组的数组来初始化,每个内部数组...

    js模拟list和map

    javascript 模拟 java中的 List,Map js文件为 js/utils.js IE6.0 测试通过 <br>List: add(var obj) //添加一个元素 remove(var index) //删除一个元素 get(var index) //获取一个元素 remove...

    js实现map用法

    不同于对象,Map中的元素会按照插入的顺序进行迭代。例如,在实现一个缓存系统时,可以使用Map来存储最近访问的项目,并保持它们的访问顺序。 此外,Map可以与其他数据结构结合使用,如Set。例如,我们可以创建一个...

    使用js实现map功能

    使用js实现map工具类

    JavaScript 实现Array(数组)和Map

    在`map.js`文件中,可能会有对Map的实现或扩展,比如添加一个`forEach`方法遍历Map的所有键值对,或者一个`size`属性获取Map中的元素数量。 `object.js`文件可能包含与Object相关的辅助函数,比如深拷贝、属性检查...

    Javascript 中类似Map集合的实现键值对

    **自定义实现Map的思路** 1. **数据结构**:首先,我们需要一个数据结构来存储键值对,可以使用数组或对象。数组可以按照特定格式(如[key, value])存储,而对象则需要处理键的唯一性。 2. **size属性**:维护一...

    用JS对象实现map功能与方法

    部分IE浏览器不支持ecmascript 6,无法使用map对象,用原生js对象实现map功能

    map的js实现

    通过分析`map.js`文件,我们可以学习如何创建自定义数据结构以模拟JavaScript内置的`Map`行为,并了解其在实际应用中的优缺点。同时,结合测试HTML页面,我们可以更全面地理解这个实现的工作流程。

    javascript实现map功能极其方便

    javascript实现map,极其方便,可在需要当前页处理多数据时使用

    JavaScript中实现Map的示例代码

    `entrySet`方法返回一个数组,包含Map中的所有键值对: ```javascript map.entrySet(); // 返回Entity[{key,value},{key,value}] ``` `containsKey`方法用于检查Map中是否存在某个键: ```javascript map....

    javascript的Map实现(高性能)

    在本文中,我们将深入探讨一种高性能的JavaScript `Map`实现,它基于JSON,具有出色的稳定性和更高的容量。 首先,我们来看传统的JavaScript `Map`。原生的`Map`提供了如`set`、`get`、`delete`、`has`等方法,便于...

    JavaScript中实现map功能代码分享

    本文将深入探讨如何使用JavaScript实现一个简单的Map功能。 首先,我们来看一下提供的代码片段。这个自定义Map类包含以下方法: 1. **size()** - 返回Map中元素的数量,即键值对的数量。它通过返回存储元素的数组...

    用js实现map功能

    * Map对象,实现map功能 * put(key, value) 向map中增加键值对 * 例子: * var map = new Map(); * * map.put("key", "value"); * var val = map.get("key");

    javascript 中Map的使用

    - `has(key)`:判断Map中是否存在指定键。 - `delete(key)`:删除指定键的键值对。 - `clear()`:清空Map中的所有键值对。 3. 属性和方法: - `size`:返回Map中键值对的数量。 - `forEach(callbackFn[, ...

    js中Map应用

    ### JavaScript中的Map应用 在JavaScript中,`Map`对象是一种内置的数据结构,它保存键值对,并且可以按插入顺序记住元素。与普通的JavaScript对象不同的是,`Map`的键可以是任何类型的值(不仅仅是字符串或符号)...

    js实现类似于JAVA的Map的封装

    通过JS的使用,实现类似于JAVA中Map的操作

Global site tag (gtag.js) - Google Analytics