Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

使用自带方法装逼

  JavaScript中有很多方便的方法可以用于解决神奇的问题,有时候不用写算法,仅通过原生的一堆方法的排列组合就可以花样装逼。比如各种字符串操作,可以考虑强行把其它东西转换成字符串来处理。还有各种神奇的正则表达式也可以利用起来解决一些本该由算法来解决的问题。
  比如一个排序的需求,如果自己写排序,要写出一大坨代码,如果知道自带的 sort 方法,一行就可以解决: var i=10000,s=[]; while(i--)s.push(Math.random()); function mySort(s){ var i,l=[],r=[],m=s.shift(); for(i in s)(s[i]>m?r:l).push(s[i]); if(l.length>1)l=arguments.callee(l); if(r.length>1)r=arguments.callee(r); return l.concat(m,r); }; var t=new Date; s=mySort(s); alert(new Date-t); var t=new Date; s=s.sort(); alert(new Date-t);   至于性能,这就和引擎有关了,现代的 JS 引擎都很快,所以自带的和自己写的没啥区别。但在一些古老的 JS 引擎上,原生的方法要快得多。
  另一个例子是获取一个包含 n 个空格的字符串:
var i=1E7,s=""; var t=new Date; while(i--)s+=" "; alert(new Date-t); var t=new Date; s=Array(1E7+1).join(" "); alert(new Date-t);   这个代码只是一个例子,是想证明系统自带的方法可以有更多妙用。如果真想获取 n 个字符可以在原算法上优化,比如使用指数迭代法就可以比 Array 还快的得到。 function nChar(n,c){ if(n==1)return c; if(n==0)return ""; var i,s="",b,r; i=r=Math.sqrt(n)|0; b=arguments.callee(r,c); while(i--)s+=b; return s+arguments.callee(n-r*r,c); }; var t=new Date; s=nChar(1E7,"1"); alert(new Date-t);   正则表达式就是一个很容易利用的东西,我们甚至可以用它来判断一个数字是不是质数。虽然效率不如使用平方根做循环的效率高,但是完全可以把这个方法利用到其它无法使用普通算法解决的地方来优化程序。 var n=65537; function isPrime(n){ return !/^(,,+)\1+$/.test(Array(n+1)); }; alert(isPrime(n));   逼装得差不多就行了。。
网名:
3.84.186.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^