当前位置: 首页 > news >正文

javascript泛型集合类(转)

前一阵比较忙,一直没空写博客...这几天好容易抽了点空了,昨天发了个数据库操作组件,今天决定人品爆发一下,把一直酝酿的javascript的泛型集合类给分享给大家.

首先声明:我的东西不一定适合你,如果你有中肯的评价我很欢迎,如果是没有什么建设性的评论......我先郁闷下..~~~

我以前发布过一个Hash类,不过现在它升级了.关于javascript的泛型集合类,我这有:List,Dictionary,Stack,Queue共4个.

其中,List,Stack,Queue其实是基于Array实现的,而Dictionary则是用了我之前写的Hash的一些做法,是基于Object的,所以getItem,remove之类的时间复杂度是1,而不是数组的遍历n(这一点,是哈希这种数据结构的意义所在,我想了不少的方案,在园子里Kenneth Jing,Jeffrey Zhao等的讨论和帮助下,找到了一个比较满意的方案 :) )

可能这个泛型类库放出来,大家讨论的会比较多...关于它的存在价值我不想多说,不过我想说一点,如果你只是在前台使用,那么它不适合你,它适合构建比较复杂系统,需要多方写作的场合,适合对js代码量多一点也无所谓的场合.

针对连同Hash一共5个类,我写了全部的源代码和测试代码,一并在这里下载.

下面我简单例举几个使用示例,关于其内部实现,都在源代码中,如果你有问题或有建议,你可以留言,或者联系我的QQ:150866957.另外,如果你找到了BUG,请一定联系我,谢谢.

还有......本类库是基于asp.net ajax的(因为我需要它的类型签名系统嘛),暂时我没有做成纯js的泛型类库的打算,我是打算吊死在asp.net ajax这棵树上了,如果你有你的需要,你可以随意更改.


1)Hash

 1 <script type="text/javascript">
 2        var h1 = new Hash();
 3        h1.add(1,2);
 4        h1.add("aa","xxx");
 5        h1.add("b","yy");
 6        h1.add("c","zzz");
 7 
 8        h1.forEach(function(item,i,h){
 9        alert(item.key+":"+item.value+":"+Object.getTypeName(item.key));
10 });
11 </script>

 

 

2)List

 1 <script type="text/javascript">
 2     var lst = new List(Number)();
 3     lst.add(1);
 4     lst.add(32);
 5     lst.add(444);
 6     
 7     var lst2 = new List(Number)();
 8     lst2.add(-1);    
 9     lst2.insertRange(0,lst);
10     lst2.forEach(function(item,i,lt){
11         alert(item);
12     });
13     alert(lst2.getCount());
14 </script>

 

3)Dictionary

 1 <script type="text/javascript">
 2        var ds = new Dictionary(Number,String)();
 3        ds.add(1,"1");
 4        ds.add(2,"222");
 5        ds.forEach(function(item,i,d){
 6        alert(Object.getTypeName(item.key)+":"+item.key+","+item.value);
 7 });
 8 
 9        var MyClass = function(name){
10        this.name = name;
11 }
12        MyClass.__typeName = 'MyClass';
13        MyClass.__class = true;
14        var a = new MyClass("a");
15        var b = new MyClass("b");
16 
17        var dss = new Dictionary(MyClass,String)();
18 
19        dss.add(a,"x");
20        dss.add(b,"y");
21        dss.forEach(function(item,i,d){
22        alert(Object.getTypeName(item.key)+":"+item.key.name+","+item.value);
23 });
24 </script>

 

 4)Stack

 

1 <script type="text/javascript">
2     var sk = new Stack(Number)();
3     sk.push(1);
4     sk.push(321);
5     sk.forEach(function(item,i,k){
6         alert(item+":"+i);
7     },'a');
8 </script>

 

5)Queue

1 <script type="text/javascript">
2       var qs = new Queue(String)();
3       qs.enqueue("1");
4       qs.enqueue("xxx");
5       qs.forEach(function(item,i,q){
6       alert(item+":"+i);
7 });
8 </script>

欢迎大家指定讨论 :)

补:大家可能对效率方面的想法比较多,可以告诉大家,在debug版开发时,会进行类型方面的验证操作; 

建议在发布的时候,把验证的代码全部去除掉,List,Stack,Queue的效率和array是一样的;另外,Hash和Dictionary不是基于数组的,是用Object实现的,在进行键值操作时效率是最高的.这种做法和Asp,net ajax是一样的 :)

相关文章:

  • 华为面试2:1分2分5分的硬币,组成1角,共有多少种组合。
  • HTML5 Canvas 血战消除游戏[连连看]
  • 根据进程启动时间进行kill
  • ORACLE——Instant Client配置SQL*LDR、EXP等命令工具
  • Android系统的开机画面显示过程分析(13)
  • Android HttpURLConnection应用技巧分享
  • 【WindowsAPI之MoveWindow】 C#调整目标窗体的位置、大小
  • [转载] Discrete Mathematics——11 群的概念和性质
  • throw与throws的范例
  • 【A - ECJTU_ACM 11级队员2012年暑假训练赛(2)】
  • 【原】Unity3D之IOS Document
  • PHP简单去掉文件里面的空行和重复行
  • 蚂蚁变大象:浅谈常规网站是如何从小变大的zz
  • 客户博客:现在在云端,使用Sitecore和Windows Azure进行Web Content管理和创作
  • 【AS3代码】翻牌游戏源码
  • 2017前端实习生面试总结
  • Babel配置的不完全指南
  • canvas 高仿 Apple Watch 表盘
  • Django 博客开发教程 8 - 博客文章详情页
  • github指令
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • learning koa2.x
  • node 版本过低
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 浅谈Golang中select的用法
  • 三分钟教你同步 Visual Studio Code 设置
  • Android开发者必备:推荐一款助力开发的开源APP
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • 我们雇佣了一只大猴子...
  • ​ArcGIS Pro 如何批量删除字段
  • ​VRRP 虚拟路由冗余协议(华为)
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • #、%和$符号在OGNL表达式中经常出现
  • #Lua:Lua调用C++生成的DLL库
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • (2)(2.10) LTM telemetry
  • (4)Elastix图像配准:3D图像
  • (C#)获取字符编码的类
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (zt)最盛行的警世狂言(爆笑)
  • (二)linux使用docker容器运行mysql
  • (二十四)Flask之flask-session组件
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (篇九)MySQL常用内置函数
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • ../depcomp: line 571: exec: g++: not found
  • .net core webapi Startup 注入ConfigurePrimaryHttpMessageHandler
  • .net core webapi 大文件上传到wwwroot文件夹
  • .NET Core 实现 Redis 批量查询指定格式的Key
  • .Net Core与存储过程(一)
  • .NET DevOps 接入指南 | 1. GitLab 安装
  • .net6解除文件上传限制。Multipart body length limit 16384 exceeded