|
|
我的评论
re: 迄今我看过的最强的排序算法 Go_Rush 2007-12-15 10:53
<script>
//其实稍加改进,这个算法是支持数组内的重复元素的.
var arr=[5,7,1,9,3,4,6,0,50,23,4,3,56,99,87];
var out=[];
var m=arr[0];
for(var i=0; i<arr.length; i++){
m=Math.max(m,arr[i]);
if (out[arr[i]]){
out[arr[i]]=out[arr[i]]+1;
}else{
out[arr[i]]=1;
}
}
//alert(out);
for(j=0; j<=m; j++){
if (out[j]) {
for(k=0;k<out[j];k++){
document.write(j,"<br>");
}
}
}
</script>
re: 迄今我看过的最强的排序算法 Go_Rush 2007-12-15 10:47
JavaScript版本:
<script language="JavaScript">
var arr=[5,7,1,9,3,4,6,0,50,23,56,99,87];
var out=[];
var m=arr[0];
for(var i=0; i<arr.length; i++){
m=Math.max(m,arr[i]);
out[arr[i]]=1;
}
//alert(out);
for(j=0; j<=m; j++){
if (out[j]) document.write(j,"<br>");
}
</script>
re : #13楼
本文钟对的是 prototype.js v1.4 存在的问题或者Bug.
这些bug或许在后续的版本中修复了,但是v1.4版本中确实存在过
re: asp.net ajax第一卷读后 Go_Rush 2007-07-20 15:31
@木野狐
明朝那些事儿 有听的吗? 是不是 mp3格式的评述啊。
能否分享一下
re: 巧夺天工:采用正则表达式解决树匹配问题 Go_Rush 2007-07-19 13:11
@xiaotie
确实,那两篇文章我没看,现在去看看
re: 巧夺天工:采用正则表达式解决树匹配问题 Go_Rush 2007-07-19 12:43
小弟才疏学浅,可硬是看不明白楼主你要表达一个什么意思。
看来我要回去补补中文了。
没有猜错的话,是不是要从网页中提取出想要的数据啊。
一个正则表达式match一下就可以啊。
楼主写了这么多到底想要什么,为什么,怎么做?
看得我一头雾水呀。
好像连算法都升级了,变成算法架构了。炫!
我怎么看不太明白你想说什么呀。
为什么不用 xmlhttp 的 post
re: 网站推广效率最高的20种办法 Go_Rush 2007-07-17 11:44
写得不错。
是原创吗,如果是原创,那你真是高人
re: toString方法无法被继承? Go_Rush 2007-07-17 10:51
@Jeffrey Zhao
呵呵,你可以误会我的意思了。
和你一样,我也十分推荐用extend prototype的方法来实现继承。
但是 toString, toLocaleString, valueOf,
hasOwnProperty, isPrototypeOf, propertyIsEnumerable
这些是在prototype无法枚举出来的。
如果我们要实现以上这些方法,并打算将来用于子类继承的话。
用 this.toString=function(){..} 可能更直观哦。
效率应该不是问题,因为即使上面所有的方法都实现的话,也只有六个。
我们是为了解决特定的问题才这样写的嘛, 并不是说把所有方法都写在类里面
re: toString方法无法被继承? Go_Rush 2007-07-17 10:29
为了更好的设计 ClassB,
在运行时 call 一下,和上面的效果是一样的.
function ClassB(){}
var a=new ClassA();
var b=new ClassB();
ClassA.call(b);
.....
b.somemethod()
.....
re: toString方法无法被继承? Go_Rush 2007-07-17 10:25
好久没有搞过javascript了,不过在实战中 toString的继承好像用得不是很多吧。
其实继承除了用 prototype的 extend大法,还可以用 call,apply之类。
<script> function ClassA() { this.test=function(){ alert( this + "'s test"); } this.toString=function(){ return Object.getType(this); } }
ClassA.prototype.showme=function(){ alert(this + "'s showme"); }
Object.getType=function(obj){ if (obj.constructor===ClassA) return "this is classAAA"; if (obj.constructor===ClassB) return "this is classBBB"; }
Object.extend=function(src,dest){ for(var key in src) dest[key]=src[key]; }
//Object.extend(ClassA,ClassB); Object.extend(ClassA.prototype,ClassB.prototype);
function ClassB(){ ClassA.call(this); }
var a=new ClassA(); var b=new ClassB();
alert(a); alert(b);
a.test(); b.test();
a.showme(); b.showme(); </script>
toString也不一定要写在 prototype链上面呀
function foo(s){
return s=s.replace(/&#(\d+);/g,function(match,n){return String.fromCharCode(n)})
}
function foo2(s){
return s.replace(/[^\x00-\xff]/g,function(x){return "&#"+x.charCodeAt(0)+";"});
}
var msg="hi,all好的,这个javascript不错";
var msg2= foo(msg);
var msg3=foo2(msg2);
alert(msg2); // hi,all好的,这个javascript不错
alert(msg===msg3); // true
@cnewbie
谢谢夸奖, 其实还有很多地方可以改进的,很多地方写法也很累赘.
我最开始写这个程序的时候,是在几乎忘记 python的时候写的.
记得有一个这样的代码片段.
arr=[1,2,3,4] 我要把 arr的值分别赋给 a,b,c,d这四个变量
我第一次写的时候是这样写的
写法一:
a=arr[0]
b=arr[1]
c=arr[2]
d=arr[3]
你别笑,我还真是这样写的,因为python的语言特性用得不熟练.
后来改进了一下
写法二:
a,b,c,d=arr[0],arr[1],arr[2],arr[3]
第三天我温习了一下 python语法.
最后改为
写法三:
a,b,c,d=arr
这就是为什么这么个简单的东西我弄了三天,其实代码中还存在许多类似的
语法表达问题, 不过还好只是语言的表达问题,而不是算法问题.
所以我都没有去改了.
从代码中可以看到我对 python语言理解运用的 恢复过程
看到这样的写法,肯定是我第一天写的
a=arr[0]
b=arr[1]
c=arr[2]
d=arr[3]
看到这样的写法 a,b,c,d=arr 就可能是第三天写的.
所以,你夸我代码写得简洁,我会觉得脸红的.
我觉得我写得很乱, 因为只有在初学者的代码中才会同时出现
写法一,写法二,写法三 的这种乱乱的写作风格
尽量让复杂的事情简单化, 简单的问题傻瓜化 , 别让我思考
当然,如果程序只是给自己用的,或者是给专业人员用的.用你的方法
代码会简洁一些, 运行效率比较高
@木野狐
关于 输出格式化为什么不用 python 天然支持的格式化语法呢?
这让我想起另外一个问题:
曾经有段时间用php开发一个项目,为了方便开发以及和UI人员的协调
要做到程序和页面分开.当时有两个方案让UI人员选
1. 数据用 xml 页面表现用 xslt
2. 用 smarty 模版实现.
最后几乎所有的UI人员都选择方案2. 为什么呢?
即使是稍微复杂的 smarty语法, UI人员都能理解并运用.
但是哪怕是最基本的 xslt语法,他们都不习惯,复杂一丁点的他们就看不懂.
我们写程序的目标是为了让所有人都能正确使用你的程序,哪怕是初学者,甚至
电脑盲,不是吗?
<tr>
<td>_ip_:_port_</td><td>_time_checked_</td><td>_speed_</td><td>_area_</td>
</tr>
这种写法,哪怕完全不懂 python, 只要他们会一丁点html, 他们都可以
随心所欲的按照自己想要的格式排版. 而且不管他们怎样改程序都不会出错
但是这种写法:
<tr>
<td>%(ip)s:%(port)s</td><td>%(time_checked)s</td><td>%(speed)s</td><td>%(area)s</td>
</tr>
就要求使用者有一点python基础. 不然作为一个不懂 python,他们心理会
有很多疑问, 他们会疑惑,他们会思考
为什么 ip 要用括号括起来,
那个 s 是做什么用的?能不能不要或者换成别的什么字母的.
那个 % 符号怎么看起来怪怪的.
稍微没有改好,程序就会出错.
比如在上面要加上一个 active 字段,还要修改代码
fomat % {"ip": "23kkf", "port": "23", ....}, 添加一个 "active":"1" 之类
@7553
是vim http://www.vim.org/
非常好用,推荐
随笔的代码部分就是由vim 自动生成的
@刘如玉
你好,这个数据也是我在网上找的,原始版本是doc格式,
后来才整理成这样的。
要更全的,我也只能通过 google. baidu搜索。
@UMU
谢谢指出,随笔中的英文字母似乎有点小, 我改了一下。
现在应该好点了
re: JSmarty Go_Rush 2007-04-05 16:33
怎么使用。
能不能写几个sample 看看效果先
re: JSmarty Go_Rush 2007-04-05 16:26
东西或许还可以。
之所以说"或许"二字,是因为300 多行的代码居然一个注释也没有,
看起来头大,我看不下去。
最起码加个函数功能说明,输入参数,返回值说明啊。
不然谁知道你要表达什么思想啊
re: IE中一个值得关注的JS问题 Go_Rush 2007-04-03 09:36
其实,不建议你这样的写法.
一个变量没有定义就直接使用,这会让代码可读性变差,让你的代码阅读者
找不到北
//这样就比较直观
function foo(abc){
abc=abc || {}
}
@木野狐
1. vim 是可以嵌入到 vs2005里面作为源代码编辑器的
2. 安装配置 vim 其实很简单的
ftp://ftp.vim.org/pub/vim/pc/gvim70ole.zip (gvim for win32)
ftp://ftp.vim.org/pub/vim/pc/vim70rt.zip (gvim runtime)
有这两个就OK了,基本上支持所有语言的语法高亮,缩进等
再装一个word_complete.vim 可以对任何源代码进行自动提示补充.
比如 我输入 var abcdfff="123"
下次我输入 ab的时候,自动在ab后提示 cdfff 按 TAB就自动填充了,方便极了
3. 希望你再返回 vim 大家庭啊.
@Jeffrey Zhao
我没有改变任何功能啊,不过可能标题误导了你.标题说的是 toString的实现
实际代码是 Object.prototype.tos.
不过扩展了 Object.prototype树. 在for(var key in obj) 遍历的时候会显示tos对象
如果你想实现 tos 功能,又不想影响 Object.prototype.
可以把稍微改装一下.
写成 Object.tos=function(obj, listAll,tbs){....}方式
调用的时候要多打几个字
alert(Object.tos(obj))
这个随笔的代码颜色是由 vim 自动生成的. 颜色方案 desert
在 vim里面非常好看,养眼. 可惜和我博客的skin格格不入..
现在太晚了,眼睛都打不开了, 明天再改变一下代码颜色和底色
re: 一个简单的Txt文件合并工具; Go_Rush 2007-03-07 09:53
小问题,小解决,编辑批处理文件 gorush.bat
@echo off set output=%1 if exist %output% del %output% :getfile shift if "%1"=="" goto end type %1 >> %output% goto getfile
:end set todir=
echo All done
现在把 1.txt 2.txt 3.txt 4.txt 合并为 output.txt
命令: gorush.bat output.txt 1.txt 2.txt 3.txt 4.txt
re: js引用 Go_Rush 2007-01-29 09:08
引用外网的js要注意。
最好这样写:
urchinTracker();
==>
try{urchinTracker();}catch(x){}
因为不是所有用户都能访问 http://www.google-analytics.com/urchin.js
尤其是教育网用户,他们很多还不能访问国外网站。
当urchin.js 不可用时,urchinTracker()将引发一个js错误
FF目前还不支持textarea的onpropertychange 只能用别的方法变通
<textarea id="txtGoRush" style="overflow:hidden" onpropertychange="this.style.height=this.scrollHeight"></textarea> <script type="text/javascript"> var txtGoRush=document.getElementById("txtGoRush") if (txtGoRush.onpropertychange===undefined) window.setInterval("txtGoRush.style.height=txtGoRush.scrollHeight",50) </script>
::而FireFox里的window.onload事件会等待动态添加的那些脚本文件也被加载完毕后才触发
如果要用动态加载,肯定是在 onload事件里面加载,效果最优。
< script src="必须页面加载时加载的脚本.js">< /script>
< script>
window.onload=function(){
var js=document.createElement("SCRIPT")
js.src="可以延迟加载而且加载次序也无关紧要的脚本.js"
}
< /script>
对于优化,动态加载Script确实是很可行的办法。
文中提到的缺陷,其实也不是什么问题,因为最重要的,必须先加载的页面都
可以用传统的方法加载。
不过不知道老赵有没有遇到过这样的问题。
var js=document.createElement("script");
js.src="..."
这种加载方式并不稳定,偶尔会出现加载失败。
这种动态加载script的方式我曾应用在一个项目中。动态加载3个js
但是并不是每次都能成功加载的。 总会有一两次出现加载失败(1%的机率)
这种不稳定性令我恨饶火。
不好意思,我看文章挺粗心的,看了你的回复,又看了一下你的文章。
才发现原来你在文中已经提到过2连接限制的问题了。
对于大型网站,增加域名是很普遍的做法。
很多商务网站,图片都是用
< img src="http://img.domain.com/somepath/pic.jpg">的方式来加载的。
他们不会用 www.domain.com 更不会简单的用相对路径。
就是为了加载页面的时候快那么一点点
博主的方法不错, document.write
但是所谓的并行下载,难道是8个js同时下载吗。
应该是两个js 并行下载吧。
因为ie默认只能对同域的两个资源进行同时请求的哦。
难道 document.write 能突破这个限制?
http://community.csdn.net/Expert/topic/5215/5215633.xml?temp=.1010095
re: [翻译]jQuery 选择器的使用 Go_Rush 2007-01-22 10:54
JQuery v1.1 出来了。
API改动了不少,比如选择器,以前 nth是从0开始的,现在改为从1开始了
当然,根据v1.1的官方blog宣称, v1.1 Dom 选择器的速度比以前版本快了
10-20倍。
jQuery 1.1’s selectors are 10x-20x faster than those in jQuery 1.0.4.
http://jquery.com/blog/
re: 挣脱浏览器的束缚(1) - 前言 Go_Rush 2007-01-18 17:56
除了 NetLimiter 其他工具都用得很爽。
Fiddler 其实要比 Http Watch 好用很多。
因为 Fiddler 支持 JScript.NET 可以把所有的连接信息保存到数据库再慢慢分析。
当然,调试阶段用Http Watch足够了。 毕竟 Fiddler会自动给你弄个127.0.0.1的Web代理
FireBug 除了自带性能分析和 内置 Ajax 分析外
还可以在js源代码中直接 写入
console.time
console.timeEnd
来计算代码,函数,或者请求的执行时间
FireBug 还支持在源程序中直接输入
console.log,
console.debug,
console.log,
console.info,
console.warn,
console.error,
console.assert, 输出 log信息, 太强了
@sdfsdf
代码是可以的,我是测试通过才回复的。
并不是只有这一个地方需要修改
loop:function(effect,pos){ //执行所有效果单元
还有几个地方要改
Effect.initialize 添加 this.fnList =new Array();
和每个 Effect.Init.... 都要修改,添加 effect.fnList.push("效果名") ..
@QQ鱼
JQuery 对 dom,css,xpath,ajax 的支持都很强
当然,还是有办法让 loop选择性的执行真正要执行的函数。
在initialize 方法里面添加一个数组,来保存loop要执行的函数名
initialize: function(element,options) {
this.element = $(element);
this.options = options || {};
this.fnList =[]; //添加这句
我们可以在每个Init方法里面这样写
Effect.Init.opacity=function(effect){
if (effect.options.opacity===undefined) return;
effect.fnList.push("opacity") //添加这句 添加 opacity方法
......
Effect.Init.size=function(effect){
if (effect.options.w!==undefined || effect.options.h!==undefined){
effect.fnList.push("size") //添加这句 添加 size方法
最后loop方法这样写:
loop:function(effect,pos){ //执行所有效果单元
for(var =0;i<effect.fnList.length;i++){
Effect.Fn[effect.fnList[i]](effect,pos)
}
}
这样的话,就可以在程序运行时根据参数 options 来执行 只相关的效果。
@robinhood007
这个问题问到点上了,其实现在这种做法的效率,也不太影响效率。
关键看写扩展的人怎么写了。
有没有注意到,我的 Effect.Fn 的方法里面所有函数第一句话,都是这样写的
if (effect.options.xxxxxx===undefined) return;
建议每个扩展都这样写,这样 执行 loop函数的时候,对于不相关的效果函数
执行到第一句就跳出了。而避免了每个函数都真正执行一次
第一个() 是 定义一个匿名函数。
第二个() 是执行这个匿名函数
@Jeffrey Zhao
是的,我一直是这样做的,最后还压缩一把,我还恨不得让服务器以
gzip压缩方式发送js 呢,不过要在服务器上对.js文件做些配置
老赵的意思是说, 不要加载许多的javascript小文件.
而是把多个javascript文件合并为一个,是这个意思吗?
@ttyp
谢谢, 我也喜欢小巧精致的东西。
而不是想要一个轮子,必须先接受对方一辆汽车。
BTW: 最近变得好懒,很久没有更新博客了,下篇随笔
(那些扩展的插件 size, move,zoom,color等),明天献上,现在正在ff下测试呢
对于你这个应用环境来说,是不需要 "g" 的,其实 "i" 也不要,
匹配一个数字要区分大小写吗??
不管加 "i" 还是加 "g" 都会让你的代码变慢。
建议只有在非常必要的情况下才加上ig
楼上已经讲得很明白了。
当然,你用了全局匹配模式 g. 所以用完要重置 lastIndex
var re = /^\d+(?:\.\d)?$/ig; //==> "ig"
alert(re.test('112.3'));
re.lastIndex=0 //加这句
alert(re.test('33'));
或者
var re = /^\d+(?:\.\d)?$/i; //==> only "i", no g
alert(re.test('112.3'));
alert(re.test('33'));
这样就OK了
re: 我与Google有个对话 Go_Rush 2006-12-29 16:26
博主,何必和他们这些无素质的人一般计较。
他们有些人连名字都不敢留,连自己的博客地址都不敢留,他们自己
说话都没有底气,典型的“脱下裤子办事,提起裤子骂人”。
何必在意他们低劣的攻击,让他们到一边吠去吧。
re: 生活在美国-最常有用的英语口语(收藏) Go_Rush 2006-12-29 09:22
收藏了,以后学习
@德仔
去看了一下你的网站,很不错,希望以后有机会能合作,我在广州
|