论坛首页 Web前端技术论坛

【JHelper framework】在JavaScript中,体验类似Java的集合和验证

浏览 2339 次
精华帖 (1) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (4)
作者 正文
   发表时间:2009-05-17   最后修改:2009-05-17
JHelper是由 Zero.Dang 开发的一款开源的OpenSource,它提供了类似Java中的List、Set、Map、Iterator 、StringBuffer以及排序用的SortList、和SortSet等功能

功能介绍:
1. JHelper.Utils工具包


Utils.StringBuffer,// 字串累加,在10000次的字串累加测试中,与" "+" "相比,快13倍
Utils.List, // 序列集合
Utils.SortList, // 有序集合
Utils.Set, // 不包含重复元素的序列集合
Utils.SortSet, // 不包含重复元素的有序集合
Utils.Map // 键值对应的集合
Utils.Iterator // 迭代器

可以用Utils.Comparator进行自定义排序

// List使用:

var list = new JHelper.Utils.List();
list.add("a");
list.get(0); // return "a"

// Map使用
var map = new JHelper.Utils.Map();
map.put("name", "张三");
map.put("name2", "李四");

// 有排序的 SortList 使用
var sortList = new JHelper.Utils.SortList();
sortList.add("C");
sortList.add("a");
sortList.add("0");
sortList.add("A");
sortList.add("E");
sortList.add("A");
sortList.add("1");

// 列印出结果
var iter = sortList.iterator()

while(iter.hasNext()) {
   document.write(iter.next() + "<br>");
}

输出的结果:
0
1
A
A
C
E
a

// 自定义排序
var myComparator = function() {
   this.compare = function(o1, o2) {

         // 降序
         return -(JHelper.Utils.compareTo(o1.name, o2.name));
   };
};

var sortList = new JHelper.Utils.SortList(new myComparator());
sortList.add({name: "C"});
sortList.add({name: "a"});
sortList.add({name: "0"});
sortList.add({name: "A"});
sortList.add({name: "E"});
sortList.add({name: "A"});
sortList.add({name: "1"});

// 列印出结果
var iter = sortList.iterator()

while(iter.hasNext()) {
    document.write(iter.next().name + "<br>");
}

输出结果:
a
E
C
A
A
1
0

//这样就不用在某些情况下自行写那些复杂的JS集合了

// JHelper.Validate验证工具包

var check = new JHelper.Validate();
check.addCheckLength("name", "[姓名]必须在2~20位之间!", 2, 20);
check.addCheckDateCompare("date1", "date2", "起值不可以大于迄值!", "yyyy/MM/dd");

alert(check.checkField() ? "成功" : "失败");


   发表时间:2009-05-18   最后修改:2009-05-18
用 java 的方式写 js …… 脑子进水了吧。

StringBuffer 是使用 Array.join 实现的,写起来还没有直接用 Array.join 简单,封装个头啊。

map 更是不可理解…… js 的对象已经是 map 了,难道
map.put("name", "张三");

能比
map.name = "张三"

更简单?

comparator 更搞笑…… 直接传个闭包不好么,非要封装,人都封装傻了。

iterator 有用吗? 看看“自定义排序”用 Prototype 的写法:(JE 的页面用了 Prototype,你可以直接打开 firebug 贴这段)
"ca0AEA1".toArray().map(function(e){
  return {name:e}
}).sort(function(a,b){
  return a.name > b.name
}).each(function(e){
  document.write(e.name + "<br/>")
})


btw:java 集合框架的实现非常牛,但 api 极其‮。包闭持支不为因 —— B 傻

这个 JHelper 不但 api 脑残,实现也很脑残:stringCompare "字符串比对" 竟然写了 11 行……
想不通,一个大于号就能做的事情还要重新实现一遍??
0 请登录后投票
   发表时间:2009-05-18   最后修改:2009-05-18
嘛嘛,也不用一棒子打死,毕竟还是有Java程序员喜欢"the Java way"的。
SortedList倒是可以弄弄,其它用起来确实还没JavaScript原本的方便。像是前两个例子,
// "list"使用
var list = []
list.push('a')
list[0] // return 'a'

// "map"使用
var map = {}
map['name'] = 'john'
map['name2'] = 'smith'

// 列印结果:
for (var i in map) {
  document.write(map[i] + '<br />')
}

说到底Java的verbose风格并不太适合JavaScript就是。要这样写JavaScript还不如直接用Java+GWT来写的好。
0 请登录后投票
   发表时间:2009-05-18   最后修改:2009-05-18
可以当自己的兴趣,折腾几下,自娱自乐一把。
不过这中做法并不推荐。



http://jindw.iteye.com/blog/188191

引用

    * 不要写那些中看不中用的集合。
    不要模仿Java 集合API,去写什么 HashMap,ArrayList。JavaScript不相信这些,这个世界简单才是硬道理。
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics