热烈祝贺台州朗动科技的站长论坛隆重上线!(2012-05-28)    热烈庆祝伟大的祖国60周年生日 点击进来我们一起为她祝福吧(2009-09-26)    站长论坛禁止发布广告,一经发现立即删除。谢谢各位合作!.(2009-08-08)    热烈祝贺台州网址导航全面升级,全新版本上线!希望各位一如既往地支持台州网址导航的发展.(2009-03-28)    台州站长论坛恭祝各位新年快乐,牛年行大运!(2009-01-24)    台州Link正式更名为台州网址导航,专业做以台州网址为主的网址导航!(2008-05-23)    热烈祝贺台州Link资讯改名为中国站长资讯!希望在以后日子里得到大家的大力支持和帮助!(2008-04-10)    热烈祝贺台州Link论坛改名为台州站长论坛!希望大家继续支持和鼓励!(2008-04-10)    台州站长论坛原[社会琐碎]版块更名为[生活百科]版块!(2007-09-05)    特此通知:新台州站长论坛的数据信息全部升级成功!">特此通知:新台州站长论坛的数据信息全部升级成功!(2007-09-01)    台州站长论坛对未通过验证的会员进行合理的清除,请您谅解(2007-08-30)    台州网址导航|上网导航诚邀世界各地的网站友情链接和友谊联盟,共同引领网站导航、前进!(2007-08-30)    禁止发广告之类的帖,已发现立即删除!(2007-08-30)    希望各位上传与下载有用资源和最新信息(2007-08-30)    热烈祝贺台州站长论坛全面升级成功,全新上线!(2007-08-30)    
便民网址导航,轻松网上冲浪。
台州维博网络专业开发网站门户平台系统
您当前的位置: 首页 » JavaScript/JQuery编程 » 用Javascript写的一个映射表(MAP)类--续

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

论坛链接
  • 用Javascript写的一个映射表(MAP)类--续
  • 发布时间:2007-10-06 09:29:29    浏览数:6291    发布者:webptr    设置字体【   
有必要在这里说明一下写这个映射表类的目的,它来自于一个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.key === key )
{
this.map.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.key === key )
{
arr[j++] = this.map.value;
//return this.map.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;
}
娱乐休闲专区A 影视预告B 音乐咖啡C 英语阶梯D 生活百科
网页编程专区E AMPZF HTMLG CSSH JSI ASPJ PHPK JSPL MySQLM AJAX
Linux技术区 N 系统管理O 服务器架设P 网络/硬件Q 编程序开发R 内核/嵌入
管理中心专区S 发布网址T 版主议事U 事务处理