JavaScript 实现简易 Map 对象的方法与接口详解
作者:服务小站时间:2026-10-27 20:18:42浏览:508
本文详细介绍如何使用 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;
};
} 作者最新文章
Java和JavaScript应用场景对比:企业级后端 vs Web前端与Node.js
2026-11-04 16:42:01
JavaScript模块化开发入门:CommonJS与ES Module的区别
2026-11-03 23:31:34
怎么创建并运行第一个js文件
2026-11-03 21:49:02
JavaScript运行环境怎么搭建?Node.js官方下载与安装教程
2026-11-03 20:03:04
NestJS 集成 TypeORM 或 Prisma 实现数据库持久化操作
2026-11-03 18:56:13
