自己项目中用到了这个,记录下来,以便下次不用到处找
//***************************** 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中,原生支持了多种数据结构,其中数组(Array)是最为常见的数据结构之一。然而,在某些应用场景下,我们可能需要一种能够根据键(key)快速查找值(value)的...
与数组不同,Map的键是有序的,并且提供了几个方便的方法,如set(key, value)用于设置键值对,get(key)用于获取键对应的值,delete(key)用于删除键值对,size属性用于获取Map中键值对的数量。`map.js` 文件可能会...
- `set(key, value)`: 向Map中添加一个键值对。 - `get(key)`: 通过键获取对应的值,如果键不存在则返回undefined。 - `has(key)`: 检查Map中是否存在指定的键。 - `delete(key)`: 删除指定键的键值对。 - `...
本文将深入探讨`Map`对象的原理、特性以及如何通过JavaScript实现`Map`的相关功能,并通过实例进行演示。 ### 1. Map的基本用法 创建一个`Map`对象非常简单,可以通过传入一个数组的数组来初始化,每个内部数组...
javascript 模拟 java中的 List,Map js文件为 js/utils.js IE6.0 测试通过 <br>List: add(var obj) //添加一个元素 remove(var index) //删除一个元素 get(var index) //获取一个元素 remove...
不同于对象,Map中的元素会按照插入的顺序进行迭代。例如,在实现一个缓存系统时,可以使用Map来存储最近访问的项目,并保持它们的访问顺序。 此外,Map可以与其他数据结构结合使用,如Set。例如,我们可以创建一个...
使用js实现map工具类
在`map.js`文件中,可能会有对Map的实现或扩展,比如添加一个`forEach`方法遍历Map的所有键值对,或者一个`size`属性获取Map中的元素数量。 `object.js`文件可能包含与Object相关的辅助函数,比如深拷贝、属性检查...
**自定义实现Map的思路** 1. **数据结构**:首先,我们需要一个数据结构来存储键值对,可以使用数组或对象。数组可以按照特定格式(如[key, value])存储,而对象则需要处理键的唯一性。 2. **size属性**:维护一...
部分IE浏览器不支持ecmascript 6,无法使用map对象,用原生js对象实现map功能
通过分析`map.js`文件,我们可以学习如何创建自定义数据结构以模拟JavaScript内置的`Map`行为,并了解其在实际应用中的优缺点。同时,结合测试HTML页面,我们可以更全面地理解这个实现的工作流程。
javascript实现map,极其方便,可在需要当前页处理多数据时使用
`entrySet`方法返回一个数组,包含Map中的所有键值对: ```javascript map.entrySet(); // 返回Entity[{key,value},{key,value}] ``` `containsKey`方法用于检查Map中是否存在某个键: ```javascript map....
在本文中,我们将深入探讨一种高性能的JavaScript `Map`实现,它基于JSON,具有出色的稳定性和更高的容量。 首先,我们来看传统的JavaScript `Map`。原生的`Map`提供了如`set`、`get`、`delete`、`has`等方法,便于...
本文将深入探讨如何使用JavaScript实现一个简单的Map功能。 首先,我们来看一下提供的代码片段。这个自定义Map类包含以下方法: 1. **size()** - 返回Map中元素的数量,即键值对的数量。它通过返回存储元素的数组...
* Map对象,实现map功能 * put(key, value) 向map中增加键值对 * 例子: * var map = new Map(); * * map.put("key", "value"); * var val = map.get("key");
- `has(key)`:判断Map中是否存在指定键。 - `delete(key)`:删除指定键的键值对。 - `clear()`:清空Map中的所有键值对。 3. 属性和方法: - `size`:返回Map中键值对的数量。 - `forEach(callbackFn[, ...
### JavaScript中的Map应用 在JavaScript中,`Map`对象是一种内置的数据结构,它保存键值对,并且可以按插入顺序记住元素。与普通的JavaScript对象不同的是,`Map`的键可以是任何类型的值(不仅仅是字符串或符号)...
通过JS的使用,实现类似于JAVA中Map的操作