自定义JavaScript字典类jsdictionary.js
/*
Dictionary类:本类实现了字典功能,所有方法、属性都模仿System..Collection.Generic.Dictionary类 构造函数:
Dictionary()
属性:
CompareMode:比较模式,0——二进制 1——文本 Count:字典中的项目数
ThrowException:遇到错误时,是否抛出异常 方法: Item(key):获取指定键对应的值 Keys():获取键数组
Values():获取值数组 Add(key,value):将指定的键和值添加到字典中 BatchAdd(keys,values):尝试将指定的键和值数组添加到字典中,如果全部添加成功,返回true;否则返回false。 Clear():清除字典中的所有项
ContainsKey(key):字典中是否包含指定的键
ContainsValue(value):字典中是否包含指定的值 Remove(key):删除字典中指定的键
TryGetValue(key,defaultValue):尝试获取字典中指定键对应的值,如果键不存在,返回默认值 ToString():返回字典中所有键和值组成的字符串,格式为“逗号分隔的键列表 分号 逗号分隔的值列表” var dic =new Dictionary();
dic.Add('11','1');
if(dic.ContainsKey('22')){
alert(dic.Item('22'));
}
dic.Clear();
*/ function Dictionary() {
var me = this; //将this指针保存到变量me中 this.CompareMode = 1; //比较关键字是否相等的模式,0——二进制;1——文本 this.Count = 0; //字典中的项目数 this.arrKeys = new Array(); //关键字数组 this.arrValues = new Array(); //值数组 this.ThrowException = true; //遇到错误时,是否用throw语句抛出异常 this.Item = function (key) //Item方法,获取指定键对应的值。如果键不存在,引发异常
{
var idx = GetElementIndexInArray(me.arrKeys, key);
if (idx != -1) {
return me.arrValues[idx];
}
else {
if (me.ThrowException)
throw "在获取键对应的值时发生错误,键不存在。";
}
} this.Keys = function () //获取包含所有键的数组 {
return me.arrKeys;
} this.Values = function () //获取包含所有值的数组
{
return me.arrValues;
} this.Add = function (key, value) //将指定的键和值添加到字典中 {
if (CheckKey(key)) {
me.arrKeys[me.Count] = key;
me.arrValues[me.Count] = value;
me.Count++;
}
else {
if (me.ThrowException)
throw "在将键和值添加到字典时发生错误,可能是键无效或者键已经存在。";
}
} this.BatchAdd = function (keys, values) //批量增加键和值数组项,如果成功,增加所有的项,返回true;否则,不增加任何项,返回false。 {
var bSuccessed = false;
if (keys != null && keys != undefined && values != null && values != undefined) {
if (keys.length == values.length && keys.length > 0) //键和值数组的元素数目必须相同
{
var allKeys = me.arrKeys.concat(keys); //组合字典中原有的键和新键到一个新数组
if (!IsArrayElementRepeat(allKeys)) //检验新数组是否存在重复的键
{
me.arrKeys = allKeys;
me.arrValues = me.arrValues.concat(values);
me.Count = me.arrKeys.length;
bSuccessed = true;
}
}
}
return bSuccessed;
} this.Clear = function () //清除字典中的所有键和值 {
if (me.Count != 0) {
me.arrKeys.splice(0, me.Count);
me.arrValues.splice(0, me.Count);
me.Count = 0;
}
} this.ContainsKey = function (key) //确定字典中是否包含指定的键 {
return GetElementIndexInArray(me.arrKeys, key) != -1;
} this.ContainsValue = function (value) //确定字典中是否包含指定的值 {
return GetElementIndexInArray(me.arrValues, value) != -1;
} this.Remove = function (key) //从字典中移除指定键的值 {
var idx = GetElementIndexInArray(me.arrKeys, key);
if (idx != -1) {
me.arrKeys.splice(idx, 1);
me.arrValues.splice(idx, 1);
me.Count--;
return true;
}
else
return false;
} this.TryGetValue = function (key, defaultValue) //尝试从字典中获取指定键对应的值,如果指定键不存在,返回默认值defaultValue
{
var idx = GetElementIndexInArray(me.arrKeys, key);
if (idx != -1) {
return me.arrValues[idx];
}
else
return defaultValue;
} this.ToString = function () //返回字典的字符串值,排列为: 逗号分隔的键列表 分号 逗号分隔的值列表 {
if (me.Count == 0)
return "";
else
return me.arrKeys.toString() + ";" + me.arrValues.toString();
} function CheckKey(key) //检查key是否合格,是否与已有的键重复
{
if (key == null || key == undefined || key == "" || key == NaN)
return false;
return !me.ContainsKey(key);
} function GetElementIndexInArray(arr, e) //得到指定元素在数组中的索引,如果元素存在于数组中,返回所处的索引;否则返回-1。 {
var idx = -1; //得到的索引 var i; //用于循环的变量 if (!(arr == null || arr == undefined || typeof (arr) != "object")) {
try {
for (i = 0; i < arr.length; i++) {
var bEqual;
if (me.CompareMode == 0)
bEqual = (arr[i] === e); //二进制比较 else
bEqual = (arr[i] == e); //文本比较
if (bEqual) {
idx = i;
break;
}
}
}
catch (err) {
}
}
return idx;
} function IsArrayElementRepeat(arr) //判断一个数组中的元素是否存在重复的情况,如果存在重复的元素,返回true,否则返回false。 {
var bRepeat = false;
if (arr != null && arr != undefined && typeof (arr) == "object") {
var i;
for (i = 0; i < arr.length - 1; i++) {
var bEqual;
if (me.CompareMode == 0)
bEqual = (arr[i] === arr[i + 1]); //二进制比较 else
bEqual = (arr[i] == arr[i + 1]); //文本比较
if (bEqual) {
bRepeat = true;
break;
}
}
}
return bRepeat;
}
}
自定义JavaScript字典类jsdictionary.js的更多相关文章
- JavaScript 功能类 Url.js
简书原文 这个类的主要目的是为了方便平时编码中的Url类型的数据操作 Github 全局名称 全局名称是由源码的最后一行代码确定的,默认为Url,如存在相同名称的对象会抛出异常: 可以通过 requi ...
- Java自定义一个字典类(Dictionary)
标准Java库只包含Dictionary的一个变种,名为:Hashtable.(散列表) Java的散列表具有与AssocArray相同的接口(因为两者都是从Dictionary继承来的).但有一个方 ...
- JavaScript学习总结(十四)——JavaScript编写类的扩展方法
在JavaScript中可以使用类的prototype属性来扩展类的属性和方法,在实际开发当中,当JavaScript内置的那些类所提供的动态 ...
- 初探JavaScript(三)——JS带我"碰壁"带我飞
已经写了两篇关于小白的JavaScript之行,不可否认,每一种语言都有其精华与糟粕之处,来不及细细体味其精华奥妙,也没法对其评头论足,只能先了解,后深入.到目前为止已经看完<JavaScrip ...
- Atitit.javascript 实现类的方式原理大总结
Atitit.javascript 实现类的方式原理大总结 1. 实现类的式::构造方法方式:原型方式:构造方法+原型的混合方式 1 2. 原型方式(function mode)经典式..实现属性推荐 ...
- [转载]python中将普通对象作为 字典类(dict) 使用
目前我知道的有两种方法: 1 定义的类继承dict类 例如 class A(dict): pass a = A() a['name'] = 12 2 给自定义的类添加 __setitem__() __ ...
- C#中的Dictionary字典类介绍
Dictionary字典类介绍 必须包含名空间System.Collection.Generic Dictionary里面的每一个元素都是一个键值对(由二个元素组成:键和值) 键必须是 ...
- javascript 定义类(转载)
Javascript本身并不支持面向对象,它没有访问控制符,它没有定义类的关键字class,它没有支持继承的extend或冒号,它也没有用来支持虚函数的virtual,不过,Javascript是一门 ...
- javascript定义类和类的实现
首先说说类,在一个类里我们会有以下的几个特征: 1. 公有方法 2. 私有方法 3. 属性 4. 私有变量 5. 析构函数 我们直接看一个例子: /***定义类***/ var Class = fun ...
随机推荐
- Mysql--7种Join查询
0.sql的执行顺序 手写顺序 机读顺序 总结 ①From:对from左边的表和右边的表计算笛卡尔积,产生虚拟表c1 ②On:对c1中的数据进行on过滤,只有符合过滤条件的数据记录才会记录在虚拟表c2 ...
- k8s的认证和service account简述
k8s的认证: 与API server通信的客户端大致有两类: 1.集群客户端工具(kubectl.kubeadm.kubelet等) 2.集群内pod. 任何客户端访问k8s时的过程: 1.认 ...
- centos7安装phpstudy
操作系统:CentOS 7 x86_64 SSH登录工具:FinalSHell 2.9.7 一.安装phpstudy 1.下载完整版: wget -c http://lamp.phpstudy.net ...
- stark组件前戏(2)之单例模式
单,一个. 例,实例.对象. 通过利用Python模块导入的特性:在Python中,如果已经导入过的文件再被重新导入时候,python不会重新解释一遍,而是选择从内容中直接将原来导入的值拿来用. ...
- [BZOJ1503]郁闷的出纳员(Splay)
Description OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常 ...
- 洛谷P2389 电脑班的裁员(区间DP)
题目背景 隔壁的新初一电脑班刚考过一场试,又到了BlingBling的裁员时间,老师把这项工作交给了ZZY来进行.而ZZY最近忙着刷题,就把这重要的任务交(tui)给了你. 题目描述 ZZY有独特的裁 ...
- winform中使用webBrowser时如何与JS交互
最近写一个GEPlugin项目,要用到geWebBrowser与JS进行交互. 这个geWebBrowser的事件 private void geWebBrowser1_DocumentComplet ...
- Python 技巧(三)—— list 删除一个元素的三种做法
我们以一个字符串为元素类型的 list 为例,进行列表元素的删除: >>> l = ['no surfing', 'flippers'] 1 法一:remove(val) >& ...
- itchat 总结(转)
python实现微信接口(itchat) 安装 sudo pip install itchat 登录 itchat.auto_login() 这种方法将会通过微信扫描二维码登录,但是这种登录的方式确实 ...
- 创建 PSO
TechNet 库 Windows Server Windows Server 2008 R2 und Windows Server 2008 浏览 Windows Server 技术 Active ...