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

原创 2004年06月07日 09:45:00

序:本来是想修改一下上一次写的文章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

Mybatis实体类和表映射

Mybatis实体类和表映射在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这种情况下的如何解决字段名与实体类属性名不相同的冲突。一、准备演示需要使用的表和...
  • u012849872
  • u012849872
  • 2016年06月07日 22:50
  • 15176

mybatis--map映射文件 标签详解

在学习编程的过程中,遇到过很多的配置文件,我知道它们可以给有的工作带来很多便利,但却总是处理不了,这里记录下我遇到的每个配置文件,并将里面用到的标签一一弄清,希望累积到最后可以有个不错的丰收。 一、...
  • baidu_32262373
  • baidu_32262373
  • 2016年03月02日 23:07
  • 2299

Java集合(四):Map映射

集是一个集合,它可以快速的查找现有的元素。但是,要查看一个元素,需要有要查找元素的精确副本。这不是一个非常通用的查找方式。通常,我们知道某些键的信息,并想要查找与之对应的元素。映射表(map)就是为此...
  • u012877472
  • u012877472
  • 2016年04月14日 14:31
  • 7281

【c++】映射表std::map

文章内容为网络搜集内容std::map映射表(Map)容器是一个按特定顺序存储以键值对组合而成的元素的关联容器// template < class Key, class T, cl...
  • u012819339
  • u012819339
  • 2016年06月02日 10:18
  • 895

Opcode Map 操作码映射表阅读指南

opcode Map 作用是详细列出各个汇编指令格式与opcode的对应关系如图1.1 图1.1 给你一个操作码 02 代表"ADD Gb,Eb" 给你一个操作码03 代表“ADD Gv,Ev” ...
  • wansichao
  • wansichao
  • 2014年11月30日 15:32
  • 1345

Core Java (二十一) 映射表(Map接口)

映射表是一种数据结构,用于存放键值对。如果提供了键,就能查找到值。 Map接口的方法: Modifier and Type Method and Descriptio...
  • xujinsmile
  • xujinsmile
  • 2013年01月26日 11:13
  • 2538

使用MyBatis自动映射表创建实体类

作用:可利用MyBatis生成器自动生成实体类、DAO接口和Mapping映射文件第一步:首先准备一个这样的目录,以及对应的文件,generatorConfig.xml暂时是空白的 第二步:编写ge...
  • u010096774
  • u010096774
  • 2015年02月08日 10:47
  • 2088

Qt中丰富的容器类---数组QVector、链表QLinkedList、映射表QMap、哈希表QHash

在C++里做大型程序时,少不了要与数组、链表等数据结构打交道。就是最简单的字符串也常常让头痛万分,Qt中有QString解决了字符串的头痛,那么其他数组等有没有更简单的解决方案呢?Qt作为一款优秀的类...
  • senkkes
  • senkkes
  • 2015年11月12日 21:10
  • 747

Hibernate数据类型映射表.bmp

  • 2007年12月13日 10:18
  • 672KB
  • 下载

selenium之 chromedriver与chrome版本映射表

  • 2016年12月25日 20:17
  • 16KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用Javascript写的一个映射表(MAP)类--续
举报原因:
原因补充:

(最多只允许输入30个字)