`
happmaoo
  • 浏览: 4540522 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

用Javascript写的一个映射表(MAP)类--续

阅读更多

序:本来是想修改一下上一次写的文章http://dev.csdn.net/Develop/article/27/27499.shtm,可CSDN不知怎么不能修改了,因此,只好重新增加。

有必要在这里说明一下写这个映射表类的目的,它来自于一个ASP项目开发中的灵感,具体是用户权限的管理和查询:

在设计用户user -> 角色roles时,用","号将用户属于的多个角色ID分开,以判断用户所属的哪些角色。在客户端的界面是两个select下拉框,左边的是人员user,右边的是角色roles,在左边的select中选择一个user,右边应能显示相应的角色,如果采用将用户ID递送至服务端查询并更新右边的用户角色,性能和效率都比较低。因此,如果将user -> roles保存在客户端,具体操作是在初始化页面时,将用户权限表中已查询到的用户和角色保存在映射表中(注意:映射表是在客户端中的,而查询是在服务端),当需要查询某个用户(用户作为关键字key)具有哪些角色(角色作为value)时,就直接映射表中查询(lookup),由于一个用户存在多个角色,所以映射表类也作了相应改动,以前的映射表类中的key关键字是不允许有重复的,现在允许有重复的关键字,相应的查询的返回值会有多个,因而返回值为数组类型。

例如,user_a用户有role_a和role_b两种角色,可以作下面的操作:

map.setAt("user_a", "role_a");

map.setAt("user_a", "role_b");

查询user_a的角色时,用map.lookUp("user_a")方法,这将返回一个数组对象,所有的角色将保存在这个返回的数组中。

修正后的代码如下://注意:下面被注释的代码,在上一个版本中存在

function struct(key, value){

this.key = key;
this.value = value;

}

function setAt(key, value){
/*
for (var i = 0; i < this.map.length; i++)
{
if ( this.map[i].key === key )
{
this.map[i].value = value;
return;
}
}
*/
this.map[this.map.length] = new struct(key, value);

}

function lookUp(key)
{
var arr = new Array();
var j = 0;

for (var i = 0; i < this.map.length; i++)
{
if ( this.map[i].key === key )
{
arr[j++] = this.map[i].value;
//return this.map[i].value;
}
}

return arr;
}

function removeKey(key)
{
var v;
for (var i = 0; i < this.map.length; i++)
{
v = this.map.pop();
if ( v.key === key )
continue;

this.map.unshift(v);
}
}

function getCount(){
return this.map.length;
}

function isEmpty(){
return this.map.length <= 0;
}

function classMap() {

this.map = new Array();

this.lookUp = lookUp;
this.setAt = setAt;
this.removeKey = removeKey;
this.getCount = getCount;
this.isEmpty = isEmpty;
}

最后阐述一点:这只是一方面的应用,你可能会把它应用到其它业务逻辑的实现上,如果有更好的想法请与我联系yjgx@sina.com

分享到:
评论

相关推荐

    详解JavaScript中Hash Map映射结构的实现_.docx

    虽然JavaScript的内置对象`Object`可以被用来模拟哈希映射的行为,但它并不是一个标准的哈希表,因此可能会导致一些潜在问题。本文将深入探讨如何在JavaScript中实现一个简单的HashMap结构,并讨论与`Object`相关的...

    纯javascript解析CSV文件使用并转成HTML表格

    CSV文件由行组成,每行由一个或多个字段组成,字段之间用逗号分隔。在某些情况下,如果字段内包含逗号,那么该字段会被引号包围。例如: ``` Name,Age,City John Doe,30,New York Jane Smith,25,London ``` 要解析...

    Laravel开发-google-map-place-detail-laravel .zip

    开发者可以创建一个模型来映射到数据表,然后使用Eloquent的方法将API响应转换为模型实例,便于进一步处理和存储。 视图部分,Laravel使用Blade模板引擎。开发者可以创建一个Blade模板来展示地图和地点详情,利用...

    前端开源库-unist-util-map

    首先,你需要导入库,然后提供一个映射函数,该函数接受一个节点作为参数,并返回一个新的节点或null(表示删除节点)。库会自动遍历整个树,并用这个函数处理每个节点,最后返回一个新的unist树。 例如,以下是一...

    基于HTML、JavaScript、CSS、Java技术的Book-Mall电商平台设计源码

    其中包括132个JPG图片、44个PNG图片、40个JavaScript脚本、28个CSS样式表、26个JSP页面、25个XML配置文件、21个JAR库文件、20个MAP映射文件、20个CLASS类文件、10个JAVA源代码文件。该平台以“三味书屋”为设计理念...

    javascript经典特效---又一搜索引擎.rar

    这个搜索引擎可能是通过HTML(超文本标记语言)和CSS(层叠样式表)与JavaScript结合,为用户提供一个动态、交互式的搜索体验。 在JavaScript中,创建一个搜索引擎涉及到以下几个关键知识点: 1. **DOM操作**:...

    map-css-filters:使用CSS过滤器值映射对象

    在描述中,“使用CSS过滤器值映射对象”意味着该库创建了一个映射结构,将CSS滤镜函数与JavaScript对象关联起来,以便于在JavaScript代码中操作和控制。这使得开发者可以在不直接编写CSS字符串的情况下,通过对象...

    js操作map类UtilMap

    总的来说,`UtilMap`是为了解决JavaScript中操作`Map`对象不直观的问题而设计的一个实用工具类。它提供了与Java类似的API,使得开发者可以更轻松地处理键值对数据,提升了代码的可读性和可维护性。在实际项目中,...

    bootstrap-theme.css.map

    Bootstrap是世界上最流行的前端开发框架之一,它为开发者提供了丰富的组件、样式和JavaScript插件,用于快速构建响应式和移动优先的网站。在标题"bootstrap-theme.css.map"中,提到的"bootstrap-theme.css.map"文件...

    Javascript实现和操作HashMap

    在JavaScript中,我们可以利用对象(object)作为HashMap的基础,因为JavaScript的对象本质上就是一个键值对的集合,其内部已经实现了哈希表的机制。 ### 自定义HashMap ```javascript class HashMap { ...

    javascript实现中文页面繁简转换

    通常,我们会创建一个名为`convertToTraditional`(繁转简)或`convertToSimplified`(简转繁)的函数,这个函数接收一个字符串作为参数,遍历字符串中的每个字符,通过映射表查找对应的转换字,并进行替换。...

    3D-WebGL-Map.zip

    在“3D-WebGL-Map.zip”这个压缩包中,包含了一个名为“WebGL-Map-master”的项目,这是一次尝试将3D建模与WebGL结合,以创建一个可操作的世界地图的实例。 3D建模是3D计算机图形学的重要组成部分,通过专业软件如...

    mapd-vega-openlayers:映射的Vega层和openlayers库集成

    **MapD Vega层**是MapD公司的一个创新,MapD是一个用于大数据分析的开源数据库系统。Vega是一种声明式语言,用于设计和创建数据可视化,由JSON格式定义。通过Vega,开发者可以轻松地创建各种图表和地图,而无需深入...

    map-tag::label:轻松映射地图模板文字表达插值

    返回一个可用于标记模板文字的函数。 对于每个插入到模板文字中的(expression, i, expressions)使用Array方法样式参数(expression, i, expressions)调用提供的mapper expression是当前表达式 i是expression在...

    panorama-to-cubemap 2比1全景图转6面图

    总的来说,"panorama-to-cubemap 2比1全景图转6面图"项目是一个实用的工具,它结合了JavaScript和WebGL技术,解决了从全景图到Cubemap的高效转换问题,为3D应用和图形设计提供了便利。在学习和使用此类工具时,了解...

    word-phoneme-map:提供CMU发音词典中列出的单词和音素之间的双向映射

    提供“ 列出的单词和音素之间的双向映射。 您可以查找对应于音素序列的单词,并查找对应于单词的音素序列。 安装 npm install word-phoneme-map 用法 在使用地图之前的某个时间,您需要调用setUpDatabase来设置...

    coronavirus-map:一个映射应用程序,该应用程序使用包含最近的冠状病毒统计信息的API并绘制出每个国家所面临的位置和影响的地图

    标题中的"coronavirus-map"项目是一个利用API获取实时冠状病毒数据的Web应用程序,它在地图上展示了全球各国受COVID-19影响的情况。这个应用程序可能是为了帮助公众更好地理解和跟踪疫情的发展,提供了可视化的数据...

    基于ResNet152的病害识别平台-Pear-Admin-Flask二次开发源码

    图片资源(PNG: 496个, GIF: 80个, JPG: 46个, SVG: 39个),JavaScript脚本(JS: 173个),Python后端代码(PY: 93个),样式表(CSS: 88个),HTML模板(HTML: 49个),配置文件(JSON: 20个),源映射(MAP: 16个...

    基于SpringBoot的全方位在线协同办公小程序源码

    - 源映射文件:31个MAP文件 - 微信小程序样式:28个WXSS文件 - 微信小程序结构:27个WXML文件 - 样式表:15个LESS文件 - 配置与构建:13个XML文件 简而言之,此小程序利用SpringBoot的高效性与稳定性,致力于提供...

    Javascript API for ArcGIS Server对象模型图.rar

    JavaScript API for ArcGIS Server是Esri公司开发的一个用于构建地理信息系统(GIS)Web应用程序的库,它使得开发者能够利用ArcGIS Server的地理处理能力、地图服务和地理编码服务等进行Web开发。本压缩包文件...

Global site tag (gtag.js) - Google Analytics