JavaScript 实现简易 Map 对象的方法与接口详解

作者:服务小站

时间:2026-10-27

浏览:507

本文详细介绍如何使用 JavaScript 数组模拟实现一个简易的 Map 对象。通过定义 put、get、remove、keys 等标准接口,提供键值对的增删改查功能。代码包含完整的构造函数及方法实现,适用于需要兼容旧版浏览器或理解底层数据结构的场景,展示了从基础接口到具体逻辑的完整实现过程。

文章目录

JavaScript 实现简易 Map 对象的方法与接口详解

以下是具体的代码实现部分:

 
/* 
* 该 MAP 对象旨在实现基础的 Map 功能。
* 
* 提供的接口规范如下:
* size():用于获取当前 MAP 中元素的数量。
* isEmpty():判断 MAP 是否为空状态。
* clear():用于删除 MAP 中的所有现有元素。
* put(key, value):向 MAP 中添加新的键值对(key, value)。
* remove(key):删除指定 KEY 的元素,若成功删除返回 True,否则返回 False。
* get(key):获取指定 KEY 对应的元素值 VALUE,若未找到则返回 NULL。
* element(index):获取指定索引位置的元素(可通过 element.key 和 element.value 分别获取 KEY 和 VALUE),若索引无效则返回 NULL。
* containsKey(key):判断 MAP 中是否包含指定的 KEY 元素。
* containsValue(value):判断 MAP 中是否包含指定的 VALUE 元素。
* values():获取 MAP 中所有 VALUE 组成的数组(ARRAY)。
* keys():获取 MAP 中所有 KEY 组成的数组(ARRAY)。
* 
* 使用示例如下:
* var map = new Map();
* 
* map.put("key", "value");
* var val = map.get("key")
* …… 
* 
*/ 
function Map() {
this.elements = new Array();
// 获取 MAP 元素个数
this.size = function() {
return this.elements.length;
}; 
// 判断 MAP 是否为空
this.isEmpty = function() {
return (this.elements.length < 1);
}; 
// 删除 MAP 所有元素
this.clear = function() {
this.elements = new Array();
}; 
// 向 MAP 中增加元素(key, value)
this.put = function(_key, _value) {
this.elements.push( {
key : _key,
value : _value
}); 
}; 
// 删除指定KEY的元素,成功返回True,失败返回False
this.removeByKey = function(_key) {
var bln = false;
try {
for (i = 0; i < this.elements.length; i++) {
if (this.elements[i].key == _key) {
this.elements.splice(i, 1);
return true;
} 
} 
} catch (e) {
bln = false;
} 
return bln;
}; 
// 删除指定VALUE的元素,成功返回True,失败返回False
this.removeByValue = function(_value) {//removeByValueAndKey
var bln = false;
try {
for (i = 0; i < this.elements.length; i++) {
if (this.elements[i].value == _value) {
this.elements.splice(i, 1);
return true;
} 
} 
} catch (e) {
bln = false;
} 
return bln;
}; 
// 删除指定VALUE的元素,成功返回True,失败返回False
this.removeByValueAndKey = function(_key,_value) {
var bln = false;
try {
for (i = 0; i < this.elements.length; i++) {
if (this.elements[i].value == _value && this.elements[i].key == _key) {
this.elements.splice(i, 1);
return true;
} 
} 
} catch (e) {
bln = false;
} 
return bln;
}; 
// 获取指定KEY的元素值VALUE,失败返回NULL
this.get = function(_key) {
try {
for (i = 0; i < this.elements.length; i++) {
if (this.elements[i].key == _key) {
return this.elements[i].value;
} 
} 
} catch (e) {
return false;
} 
return false;
}; 
// 获取指定索引的元素(使用element.key,element.value获取KEY和VALUE),失败返回NULL
this.element = function(_index) {
if (_index < 0 || _index >= this.elements.length) {
return null;
} 
return this.elements[_index];
}; 
// 判断MAP中是否含有指定KEY的元素
this.containsKey = function(_key) {
var bln = false;
try {
for (i = 0; i < this.elements.length; i++) {
if (this.elements[i].key == _key) {
bln = true;
} 
} 
} catch (e) {
bln = false;
} 
return bln;
}; 
// 判断MAP中是否含有指定VALUE的元素
this.containsValue = function(_value) {
var bln = false;
try {
for (i = 0; i < this.elements.length; i++) {
if (this.elements[i].value == _value) {
bln = true;
} 
} 
} catch (e) {
bln = false;
} 
return bln;
}; 
// 判断MAP中是否含有指定VALUE的元素
this.containsObj = function(_key,_value) {
var bln = false;
try {
for (i = 0; i < this.elements.length; i++) {
if (this.elements[i].value == _value && this.elements[i].key == _key) {
bln = true;
} 
} 
} catch (e) {
bln = false;
} 
return bln;
}; 
// 获取MAP中所有VALUE的数组(ARRAY)
this.values = function() {
var arr = new Array();
for (i = 0; i < this.elements.length; i++) {
arr.push(this.elements[i].value);
} 
return arr;
}; 
// 获取MAP中所有VALUE的数组(ARRAY)
this.valuesByKey = function(_key) {
var arr = new Array();
for (i = 0; i < this.elements.length; i++) {
if (this.elements[i].key == _key) {
arr.push(this.elements[i].value);
} 
} 
return arr;
}; 
// 获取MAP中所有KEY的数组(ARRAY)
this.keys = function() {
var arr = new Array();
for (i = 0; i < this.elements.length; i++) {
arr.push(this.elements[i].key);
} 
return arr;
}; 
// 获取key通过value
this.keysByValue = function(_value) {
var arr = new Array();
for (i = 0; i < this.elements.length; i++) {
if(_value == this.elements[i].value){
arr.push(this.elements[i].key);
} 
} 
return arr;
}; 
// 获取MAP中所有KEY的数组(ARRAY)
this.keysRemoveDuplicate = function() {
var arr = new Array();
for (i = 0; i < this.elements.length; i++) {
var flag = true;
for(var j=0;j<arr.length;j++){
if(arr[j] == this.elements[i].key){
flag = false;
break;
} 
} 
if(flag){
arr.push(this.elements[i].key);
} 
} 
return arr;
}; 
} 

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章