Underscore.js库
你一天(一周)内写了多少个循环了?
这当然无害,但这种写法非常丑而且奇怪,这也不是真正需要抱怨的。但这种写法太平庸了。
你在扩展糟糕的代码,在你抛出一大堆if前,你已经精神错乱了。 我在两年里没有写一个循环(loop)。 “你在说什么?” 这是真的,一个冷笑话。其实不是一个都没有(好吧,我确实写了几个),因为我不写循环(loops),我的代码更容易理解。 怎么做的呢?
或者更好一点:
这就是underscorejs所做到的。干净,简单,易读,短,没有中间变量,没有成堆的分号,简单非常优雅。 这是另外一些例子。
同样,一个使用循环浪费时间的典型用例。即便这些网站是宣传禁烟和素食主义的,看到这些代码我也感到义愤。看看简单的写法。
像underscore中的filter(过滤)的名字那样,随手写的3行代码就可以给你一个新的数组(array)。 或者你想把这些数组转换成另外一种形式?
上面三个例子在日常生活中已经够用了,但这些功能还不足矣让underscore放到台面上。
underscore版本
这个刚开始看上去可能有点怪,我查了下关于reduce的文档,知道了它的存在。因为我拒绝使用循环,所以它是我的首选。上面这些东西仅仅是入门,underscorejs库还有一大堆牛B的功能。
30天不使用循环的挑战。
在一下一个30天里,不要使用任何循环,如果你看到一堆讨厌和粗糙的东西,用each或者map将他们替换掉。再用一点reducing。
你需要注意到,Underscore是通往函数式编程的。一种看得见,看不见的方式。一条很好的途径。
OurJS注*目前现代浏览器已经支持each,filter,map,reduce方法,但underscore库可以实现对旧版IE的兼容,下面是使用ES5原生方法写的例子:
return obj < 3
});
[9,8,5].map(function(obj){
return obj + 2;
});
[1,5].reduce(function(pre,cur,idx,arr) {
console.log(idx); //4 个循环: 2-5
return pre + cur;
}); //15
//sort方法同样很有用
[9,5].sort(function(obj1,obj2){
return obj1 - obj2;
});
for in与for loop
有人提出for in的效率要比for loop(循环)的效率低非常多。现在我们测试一下在不同浏览器中使用for in,for loop和forEach在处理大数组时的效率究竟如何。
目前绝大部分开源软件都会在for loop中缓存数组长度,因为普通观点认为某些浏览器Array.length每次都会重新计算数组长度,因此通常用临时变量来事先存储数组长度,如:
我们也会测试一下缓存与不缓存时的性能差异。
同时在每个测试循环中添加求和运算,来表明其不是空循环。
我们也会测试一下缓存与不缓存时的性能差异。
同时在每个测试循环中添加求和运算,来表明其不是空循环。
测试代码 | 计算结果 | 所需时间,毫秒 | </tr>');
---|