/*
* MAP对象,基于Array实现并扩展MAP功能
*
* 方法说明:
* size() 获取map元素个数
* isEmpty() 判断map是否为空
* clear() 删除map所有元素
* push(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的元素
* containsKeyIgnoreCase(key) 判断map中是否含有指定key的元素(忽略大小写)
* containsValue(value) 判断map中是否含有指定value的元素
* values() 获取map中所有value的数
* uniqueValues() 获取map中所有VALUE的数组,唯一的value
* keys() 获取map中所有key的数
* sort() map排序,按照push的顺序
* inverse() map排序,按照push的顺序倒序
* randomKey() 随机一个key
* randomValue() 随机一个value
* randomEntry() 随机一个key-value
*
* 使用例子:
* var map = new Map();
* map.push("key", "value");
* var val = map.get("key");
* map.containsValue("val");
* map.inverse();
* readme: 建议使用字符串作为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.push = function (_key, _value) {
//判断是否存在key
if (this.containsKey(_key)) {
return;
}
this.elements.push({
key: _key,
value: _value
});
}
//向MAP中从右边删除元素
this.pop = function () {
return this.elements.pop();
}
//向MAP中从左边删除元素
this.shift = function () {
return this.elements.shift();
}
//删除指定KEY的元素,成功返回True,失败返回False
this.remove = function (_key) {
var bln = false;
//判断是否存在key
if (!this.containsKey(_key)) {
return bln;
}
try {
//遍历数组
for (i = 0; i < this.elements.length; i++) {
if (this.elements[i].key == _key) {
//从数组中移除
this.elements.splice(i, 1);
return true;
}
}
} catch (e) {
console.log(e);
}
return bln;
}
//获取指定KEY的元素值VALUE,失败返回NULL
this.get = function (_key) {
var result = null;
try {
for (var i = 0; i < this.elements.length; i++) {
if (this.elements[i].key == _key) {
return this.elements[i].value;
}
}
} catch (e) {
console.log(e);
}
return result;
}
//获取指定索引的元素(使用element.key,element.value获取KEY和VALUE),失败返回NULL
this.element = function (_index) {
//判断下标是否存在
if (isNaN(_index) || _index < 0 || _index >= this.elements.length) {
return null;
}
try {
return this.elements[_index];
} catch (e) {
console.log(e);
}
return null;
}
//判断MAP中是否含有指定KEY的元素
this.containsKey = function (_key) {
var bln = false;
try {
for (var i = 0; i < this.elements.length; i++) {
if (this.elements[i].key == _key) {
bln = true;
}
}
} catch (e) {
console.log(e);
}
return bln;
}
//判断MAP中是否含有指定KEY的元素(忽略大小写)
this.containsKeyIgnoreCase = function (_key) {
var bln = false;
try {
for (var i = 0; i < this.elements.length; i++) {
if ((this.elements[i].key+"").toLowerCase() == (_key+"").toLowerCase()) {
bln = true;
}
}
} catch (e) {
console.log(e);
}
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) {
console.log(e);
}
return bln;
}
//获取MAP中所有VALUE的数组(ARRAY)
this.values = function () {
var arr = new Array();
for (var i = 0; i < this.elements.length; i++) {
arr.push(this.elements[i].value);
}
return arr;
}
//获取MAP中所有VALUE的数组(唯一的 ARRAY)
this.uniqueValues = function () {
var arr = new Array();
for (var i = 0; i < this.elements.length; i++) {
var v = this.elements[i].value;
//判断数组中是否存在
if (arr.indexOf(v) < 0) {
arr.push(v);
}
}
return arr;
}
//获取MAP中所有KEY的数组(ARRAY)
this.keys = function () {
var arr = new Array();
for (var i = 0; i < this.elements.length; i++) {
arr.push(this.elements[i].key);
}
return arr;
}
//获取MAP中所有KEY-VALUE 的数组(ARRAY)
this.toString = function () {
var arr = new Array();
for (var i = 0; i < this.elements.length; i++) {
arr.push(this.elements[i].key+":"+this.elements[i].value);
}
return arr;
}
//生成随机数
this.randomNum = function (size) {
var size = this.elements.length;
var num = parseInt(Math.random() * size);
return num;
}
//随机一个key
this.randomKey = function () {
var randomNum = this.randomNum;
return this.elements[randomNum].key;
}
//随机一个value
this.randomValue = function () {
var randomNum = this.randomNum;
return this.elements[randomNum].value;
}
//随机一个元素(map)
this.randomEntry = function () {
var randomNum = this.randomNum;
return this.elements[randomNum];
}
//map反转,按照push的顺序反转
this.inverse = function(){
this.elements.reverse();
}
//map排序,按照push的顺序
this.sort = function(){
this.elements.sort();
}
}
相关推荐
在JavaScript的世界里,`Map`对象是一个非常重要的数据结构,它允许我们存储键值对,其中键可以是任何类型的...在阅读`MapUtil.js`源码时,可以关注这些方法的实现细节,理解它们如何优化和扩展了原生`Map`对象的能力。
【标题】"基于HAMT的小型单文件可扩展密钥值存储" 提示我们讨论的是一个使用哈希映射数组多重表(Hash Array Mapped Trie,简称HAMT)实现的轻量级、单文件且可扩展的键值存储系统。这种存储方案常用于JavaScript...
### FPGA 实现 Map Reduce(FPMR):加速与优化 #### 概述 随着机器学习和数据挖掘在计算领域获得越来越多的关注,寻找高效、低功耗且灵活的硬件平台成为了一个紧迫的需求。FPGA(Field Programmable Gate Array)...
`ImmutableArray`是实现这一概念的一个库,它扩展了JavaScript原生数组,提供了额外的方法来操作数组,同时保持其不可变性。在“Immutable Array原型方法(Per方法包)的集合”中,我们关注的是一个名为`Per`的方法...
从项目名和标签“nodejs array”我们可以推断,这个项目可能是为了提供一系列增强或扩展JavaScript原生数组功能的工具或者模块。在Node.js环境中,由于JavaScript的特性,数组操作在处理大量数据时可能会遇到性能...
这个名为"axax"的扩展库正是针对JavaScript的异步迭代器进行了功能增强,提供了诸如map、reduce、filter、flatMap和pipe等实用方法,使得异步数据处理更加方便和高效。 首先,我们来了解下这些方法: 1. **异步Map...
FPGA(Field-Programmable Gate Array)是可编程逻辑器件,可以灵活地实现各种数字逻辑功能,包括复杂的编码和解码算法。在本项目中,我们将深入探讨如何在FPGA上实现基于硬件的Turbo码译码器。 Turbo码是由两个或...
在Microsoft AJAX Library中,Array对象新增了诸如forEach、each、map、filter、some和every等方法,这些都是基于ECMAScript 5标准的迭代函数。这些新方法提供了更强大的数组操作能力,例如遍历、转换和筛选数组元素...
类似于`Array.prototype.map()`,`mapTo`可以遍历数组并将每个元素转换成新形式,但可能提供了更多的灵活性,如支持异步操作。 7. **数组拆分** (`chunk`) 这个方法可能会将一个大数组分割成若干个小数组,每个...
宁数组(Ning·Array)是一组实用的基于ES6语法的自定义数组方法,它扩展了JavaScript原生数组的功能,提供了更为灵活和强大的数组操作工具。这些方法旨在简化常见的数组处理任务,提高代码的可读性和效率。下面将...
#### 实现3:扩展数组原型并使用`map`函数 此方法涉及对JavaScript原生数组的`map`方法进行扩展,以方便生成随机颜色代码。 ```javascript // 扩展Array.prototype.map方法 Array.prototype.map = function (fn, ...
本文将深入探讨这两个方法,并基于题目中给出的示例 "['1','2','3'].map(parseInt)" 进行扩展,展示它们的实现方式以及如何在实际编程中应用。 `map()` 是一个数组方法,它创建一个新的数组,新数组中的元素是原始...
为了实现兼容性,可以通过向`Array.prototype`扩展来添加这些方法,如下所示: ```javascript if (!Array.prototype.forEach) { Array.prototype.forEach = function(callback, thisArg) { // 实现forEach逻辑 }...
本教程将聚焦于一个基于JS的购物车案例,旨在帮助学生和初学者深入理解和实践JavaScript在网页动态功能中的应用。 首先,让我们了解一下JavaScript的基础。JavaScript是一种解释型的、面向对象的、弱类型的脚本语言...
1. `array_map`:对数组中的每个元素应用一个函数并返回新数组。 2. `array_filter`:根据指定的回调函数过滤数组元素。 3. `array_reduce`:通过遍历数组并将结果累加到单一的值上。 4. `array_walk`:对数组中的每...
1. **数组方法增强**:可能提供了对原生JavaScript数组方法的扩展,比如`map()`, `filter()`, `reduce()`等,以支持更复杂的操作或提供更好的性能。 2. **上下文感知**:'ctx'可能代表上下文(context),这个核心...
- **`HashMap`**:基于哈希表实现的`Map`接口,提供高效的键值对映射操作。 - **`TreeMap`**:基于红黑树实现的`Map`接口,能够按照键进行排序。 - **`LinkedList`** 和 **`ArrayList`**:分别适用于频繁插入/删除和...
首先,数组(Array)是最基础的数据结构,它允许我们存储固定数量的同类型元素,并通过索引进行访问。虽然数组效率高,但容量固定且不支持动态扩展,也无法直接获取已存储元素的数量。Java提供的`Arrays`类提供了...
3. **SortedMap**:扩展了`Map`接口,提供了排序功能。 - **TreeMap**:基于红黑树实现的`SortedMap`,能够按照键的自然顺序或者自定义比较器进行排序。 4. **WeakHashMap**:键是弱引用的`Map`实现,适用于缓存...
7. **映射(Map)**:键值对的有序集合,`std::map`基于红黑树,`std::unordered_map`使用哈希表。 8. **向量(Vector)**:动态数组,提供高效随机访问,但插入和删除元素在非尾部时效率较低。C++标准库中的`std::...