第 21 页|baby | IT圈子,ITBBB.COM

JSFunction-Array-distinct对于鸭式类型的数组去重函数

2014/04 19 11:04

JSFunction这个常用函数库的整理过程中,其实第一次写Array扩展函数的时候就包含了distinct的扩展,但是在api中我并没有公布出来,因为当时只支持对String、Int型的数组进行去重,对于Object类型的数组存在问题;之后又忙于整理ArrayLinq函数,就一直没有去重写这个函数,直到今天我终于花了一些时间吧这个较有意义的函数书写完成,并融合了ArrayLinq的语法支持按字段去重,可以让前端处理数据上更加灵活。 举例说明: 对于数值型数组去重

var intarr = [1, 2, 3, 4, 5, 3, 2]; intarr.distinct();

结果:[1,2,3,4,5] 字符串数组去重

var strarr=["zhangsan","lisi","wangwu","lisi"]; strarr.distinct();

结果:["zhangsan","lisi","wangwu"] 上边两个函数都非常简单易懂,对于下边object类型的数组进行去重,我简要说明一下原理。 对于object我们不能单纯的用等号去判断两个对象是否相等,经朋友提示,需要使用鸭子类型判断方法,学动态语言的都知道一句话:“如果它走起来像鸭子,而且叫起来像鸭子,那么它就是鸭子”,对于Object类型元素,如果它的每一个键值都相等,我们就认为它是同一个对象。原理就是对比Object的每一个键值对是否相等,当然这里用到了一个巧妙的方法,运用递归把所有的键值都展开组成一个字符串,然后去对比是否存在重复的字符串来除去重复的元素。 Object数组去重

var objarr=[{ x: "1", y: "a" } }, {

结果:[{ x: "1", y: "a" } }, { x: "2", y: "b" }] 当然对于上面的数组我们也可以使用ArrayLinq的语法进行按某个字段值进行去重,方法如下。

objarr.distinct(function(item){ return item.y; });

结果:[{ x: "1", y: "a" } }, { x: "2", y: "b" }] Object复合数组去重,对于object下还包含object的数组,我们在鸭子判断的时候递归去调用了鸭子判断方法,可以遍历多级object数组。

var objarr=[{ x: "1", y: { m: 1, n: 2 } }, { x: "2", y: "b" }, { x: "1", y: { m: 1, n: 2 } }];
objarr.distinct();

结果:[{ x: "1", y: { m: 1, n: 2 } }, { x: "2", y: "b" }];

objarr.distinct(function(item){ return item.x; });//按照字段x是否重复进行筛选

结果:[{ x: "1", y: { m: 1, n: 2 } }, { x: "2", y: "b" }];

如果您对这个函数有更好的方法可以实现,可以留言给我,在完善代码的路上有大家的支持才能走的更远,写的更好。--北北

影像之美—《上帝之眼》(下)

2014/04 17 09:04
上帝之眼

时至今日,《上帝之眼》终于被我完完整整的读完了,在上篇中已经总结了一些经验,那么接下来,还有一些东西值得记录。 ·用光:清晨和傍晚是最佳拍摄时间,因为此时的阳光入射角较小,色温低,光线柔和,是绝佳的拍摄时间。顺光突出主体,侧光勾勒轮廓,逆光可以拍出剪影,当然视不同情况画面 总会有意想不到的表现。 ·拍摄水:比如湖面、河流、瀑布等,用快速快门可以定格水的瞬间,用慢速快门可以拍出水流的连续性,甚至可以尝试使用中灰镜来延长曝光时间,拍出水的质感。另外水还有反光性,可以拍摄倒影,让画面显得宏大。 ·不同场景:对于拍摄山岳,秘诀就是早起,日出时候是绝佳拍摄时刻;对于拍摄花卉、昆虫劲量使用微距,表现更多细节;对于建筑拍摄,广角镜头再合适不过了,用来表现建筑的恢宏气势;对于拍摄动物,一只长焦镜头也是必不可少的,而且要调快快门,尝试连续拍摄模式,这样可以捕捉稍纵即逝的瞬间。 ·人文摄影,最好的方式就是让景物与人融合,让影像有叙事性,突出的是民俗、职业、生活、集会、表情等等,带有感情的人文摄影才会触动心灵。 ·运动物体,通常使用较快的快门来定格物体,但是尝试采用追随拍摄会得到意想不到的效果,把快门调制1/15s左右,让相机随着运动物体移动,直到快门释放。 追随拍摄

JSFunction-javascript常用函数库整理的心路历程

2014/04 16 09:04

这些天一直忙于整理JSFunction,它像我孕育的一个新生儿.

Javascript常用函数库

JSFunction是对Javascript常用函数的整理总结,它依赖于jQuery,其中包含了我们经常用到,但是jQuery又没有提供的方法。

目前压缩后的JSFunction.min.js仅仅12kb,而却包含了cookie、browser的常用操作,String、Date、Array的扩展,Array中还加入了类似Linq的结构化查询方法,Url参数的捕获,表单数据抓取转换,之后还会完善一些$.fn的常用函数,如果你觉得这些对你的开发有所用处,可以尝试使用JSFunction。

当你用心去做一件事的时候,才会发现其中的乐趣,举例说明:

1. 开始我写jQuery是Jquery,把”J”字母大写,后来反复查阅api的过程中,发现更为严谨官方的写法是jQuery,于是就改正了,有时候可能就是这样不经意的细节影响了整个API的质量,我会在API的阅读性上付出点滴努力;

2. 再比如之前写的判断浏览器内核的代码判断IE的标准是userAgent中含有msie标记,但是新发行的IE11中已经把这个标记(msie)去掉了,所以之前很多网站常用的$. browser.msie已经不好用了,所以在新的代码中做出了修正;

3. 每一个函数的执行我都会亲手测试IE6到IE11、chrome、Firefox等主流浏览器,这其中会发现很多问题,很多之前的代码随着浏览器的发展已经不再好用,所以在新的JSFunction中做出了相应的修正。

虽然目前我还不能保证每一个函数的书写是正确而完美的,但是我正在付出努力去完善它,优化它,而这将成为我近期的主要工作之一,很希望大家一起参与其中,发现问题,解决问题,一起打造一个底层的常用函数库。

希望可以用优雅的代码净化你的编程环境,因热爱,而改变。–北北



无觅相关文章插件,快速提升流量