自定义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 ...
随机推荐
- pytthon + Selenium+chrome linux 部署
1,centos7 安装 google-chrome (1) 添加chrome的repo源 vi /etc/yum.repos.d/google.repo [google] name=Google-x ...
- 九、Linux 磁盘管理
Linux 磁盘管理 Linux磁盘管理好坏直接关系到整个系统的性能问题. Linux磁盘管理常用三个命令为df.du和fdisk. df:列出文件系统的整体磁盘使用量 du:检查磁盘空间使用量 fd ...
- TP5 发送邮件代码
发送邮箱邮件方法 /** * 系统邮件发送函数 * @param string $tomail 接收邮件者邮箱 * @param string $name 接收邮件者名称 * @param strin ...
- Android开发——用户在屏幕上的手势识别
个定点决定.四个属性分别为left(1),top(2),right(3),bottom(4). 数字为图上标出的距离.显然这四个属性是相对于父容器来定的,均可以通过get()方法获取. 因此很容易得出 ...
- MySQL之索引(四)
压缩索引 MyISAM使用前缀压缩来减少索引的大小,从而让更多的索引可以放入内存中,这在某些情况下能极大地提高性能.默认只压缩字符串,但通过参数设置也可以对整数做压缩. MyISAM压缩每个索引块的方 ...
- js 实现5秒倒计时后跳转页面
<script type="text/javascript"> function countDown(secs, surl) { var jumpTo = docume ...
- JS一个非常经典的问题:在遍历数组时对DOM监听事件,索引值将始终等于遍历结束后的值
一个简单的Tab选项卡点击事件. <style type="text/css"> ul{padding:0;margin:0;} .tab{width:400px;} ...
- Asp.net自定义控件开发任我行(2)-TagPrefix标签
摘要 前面我们已经做了一个最简单的TextBox的马甲,此篇文章,我们来讲讲自定义控件的标签.大家可能看到了上一篇中拖放进来的代码是 <cc1:TextEdit ID="TextEdi ...
- Detect Vertical&Horizontal Segments By OpenCV
Detect Vertical&Horizontal Segments By OpenCV,and Save the data to csv. Steps: Using adaptiveThr ...
- 翻译MDN里js的一些方法属性
TypeError The TypeError object represents an error when a value is not of the expected type. [TypeEr ...