livedoor Blog��䤬���Ѥ��ĤŤ��Ƥ�����ͳ�ΤҤȤĤ���JavaScript������դ��뤳�ȡ�
�������Ǥ��ʤ��entries��ί�ޤ�ޤ���������������ˤǼ¹��ѤΥ�������ɽ���ѤΥ��������Ѱդ���Τ��Ͱ��ܤ��ä����˴������ޤ�������ʤ櫓�ǡ��ɤ������������ä�ȯ���Ǥ��뤫��ޤȤ�Ƥߤޤ�����
0. DOM��ID��դ餺�˥ǥ��
����ʴ����Υǥ⤬���ä��Ȥ��ޤ��礦����404 Blog Not Found:javascript - Array#sort������quicksort����٤�!?�פˤ����Τ��ľ������ΤǤ���
�褯����Τϡ�input������pre������ID��դäơ�document.getElementById('foobar')
�ǥ�����������Ȥ�����Ρ�Prototype.js��jQuery��ȤäƤ����$('foobar')
��û���Ϥʤ�ޤ�����HTML������μ�֤ϸ���ޤ���
���������Τ褦�˽񤯤��Ȥǡ�ID�����פˤʤ�ޤ���
# of Items: <input type="text" value="10000" size="8" maxlength="8" ><input type="submit" value="start" onclick="run_demo(this)" ><pre></pre>
�ǡ�run_demo
����ȤǤ������ʲ��Τ褦�ˤʤäƤ��ޤ���
run_demo = function(that){ var val = that.previousSibling.value; var pre = that.nextSibling; pre.innerHTML = ''; var seed = random_array(val); (function(o){ for (var k in o) (function(l, f){ window.setTimeout(function(){ pre.innerHTML += l + ':\t' + timeit(f, seed) + 'ms' + '<br>'; }, 0) })(k, o[k]); })({ builtin:builtinsort, quick_iter:quicksort_i, quick_recur:quicksort_r }); };
souce_code_above.replace(/that/g,'this')
����С����Τޤޥܥ����onclick
����ˤ֤��ޤ����ޤ��������ǤϺǸ��tip�Τ���ˡ������ƴؿ��ˤ��Ƴ��������Ƥ��ޤ���
1. PRE��������Ȥ򥯥�å��Ǽ¹Ԥ���
����ʴ����Τ�ΤǤ���
alert('Hello, JavaScript');
����ϡ��ʲ��ΤȤ���˼¸�����ޤ���
<pre> alert('Hello, JavaScript'); </pre><input type="submit" value="Run" onclick=" try{ var e = this.previousSibling; eval( e.innerText || e.textContent ); }catch(e){ alert(e); } ">
pre������input�����δ֤˷�֤��ʤ��Τϡ�tip#0��Ʊ�ͤ���ͳ�Ǥ���
pre�ǤϤʤ���textarea��input�ʤ顢����˥���ץ�ˤʤ�ޤ���
����ʶ��ˡ�
<textarea> alert('Hello, JavaScript'); </textarea><input type="submit" value="Run" onclick=" try{ eval( this.previousSibling.value ); }catch(e){ alert(e); } ">
3.PRE��������Ȥ򡢥����ɻ���ɾ������
�����Ĥϼ¤Ϻ��ޤǤⰦ�Ѥ��Ƥ����ΤǤ������⤦��Ĥ�tip�򸫤Ĥ����Τǡ�
����˰ܤ����ˡ��ޤ��Ͼ�Υǥ�ǻȤ�줿�ؿ��������ʤɤ�
timeit = function(){ var elapsed = (new Date).getTime(); var args = Array.apply(null, arguments); args.shift().apply(null, args); elapsed = (new Date).getTime() - elapsed; return elapsed; }
���ƤΤȤ��ꡢ�¹Ի��֤��¬���ޤ���timeit(func, arg)
�Ȥ������˻Ȥ��ޤ��� args.shift().apply(null, args)
���빽�������äƤޤ���
random_array = function(n){ var ret = [0]; while(--n) ret[n] = n; // sorted array for (n = ret.length-1; n; --n) { // Fisher-Yates Suffle var m = Math.floor(Math.random() * (n + 1)); if (n == m) continue; var tmp = ret[n]; ret[n] = ret[m]; ret[m] = tmp; } return ret; };
n�Ĥ����Ǥ����ä���������������ޤ���
middle = function(h, t){ return h + ((t - h) >>> 1) }; cmp_number = function(a, b){ return a - b; }
�����Ȥμ����Ǥ褯�Ѥ�����ؿ��Ǥ���
builtinsort = function(ary, cmp){ return ary.slice().sort(cmp || cmp_number); };
builtin��Array.prototype.sort()
�����˲�Ū�˼¹Ԥ��ޤ���ary.slice()
�Ǹ�������Υ��ԡ����äƤ��ޤ���
quicksort_r = function(ary, cmp){ var ret = ary.slice(); if (! cmp ) cmp = cmp_number; return (function (head, tail) { var pivot = ret[middle(head, tail)]; var i = head - 1; var j = tail + 1; while (1){ while (cmp(ret[++i], pivot) < 0); while (cmp(ret[--j], pivot) > 0); if (i >= j) break; var tmp = ret[i]; ret[i] = ret[j]; ret[j] = tmp; } if (head < i - 1) arguments.callee(head, i - 1); if (j + 1 < tail) arguments.callee(j + 1, tail); return ret; })(0, ary.length - 1); }
quicksort�μ����Ǥ������������㡼�Τ������ǡ��Ƶ��ƤӽФ���ɬ�פʰ����ο�����ĤǺѤ�Ǥ��ޤ��������arguments.callee
�Τ������ǡ����κƵ��ƤӽФ�����̵̾�Ǥ���
quicksort_i = function(ary, cmp){ var ret = ary.slice(); if (! cmp ) cmp = cmp_number; var stack = [ 0, ary.length - 1 ]; while(stack.length){ var tail = stack.pop(); var head = stack.pop(); var pivot = ret[middle(head, tail)]; var i = head - 1; var j = tail + 1; while (1){ while (cmp(ret[++i], pivot) < 0); while (cmp(ret[--j], pivot) > 0); if (i >= j) break; var tmp = ret[i]; ret[i] = ret[j]; ret[j] = tmp; } if (head < i - 1) { stack.push(head); stack.push(i - 1); } if (j + 1 < tail) { stack.push(j + 1); stack.push(tail); } } return ret; }
���������Ƶ��ǡ��Ƶ��ؿ���ɤ���ä�����Ƶ�������Τ���狼��䤹���񤤤Ƥߤޤ�����
�ǡ���äȤ������餬���ꡣ�¤ϡ������ޤǤ�script�����ϰ����о줷�Ƥ��ޤ��󡣳ƴؿ��������pre��������ˤΤ�¸�ߤ��ޤ��������������Ƥ�pre������script�����ˤϤ������ʤ��Τǡ�class="evalonload"
�ȤʤäƤ����ΤΤߤ�ɾ�����뤳�Ȥˤ��ޤ���
���η�̤����ʲ��Ǥ���
(function(root, className){ var walkDOM = function(node, f){ f(node); var kids = node.childNodes; for (var i = 0, l = kids.length; i < l; i++) arguments.callee(kids[i], f) }; walkDOM(root, function(node){ if (node.nodeType !== 1) return; if (node.nodeName.toLowerCase() !== 'pre') return; if (node.className !== className) return; node.className = 'prettyprint'; // for google-code-prettify try{ eval(node.innerText || node.textContent); }catch(e){ alert(e + "\n" + (node.innerText || node.textContent)); } }); })(document.body, 'evalonload');
�¤˥���ץ�ʤ�ΤǤ���walkDOM
��̵̾���Ǥ����㤤�ޤ������褯�Ȥ���ǽ�ʤΤǡ���������ȴ���Ф���褦�ˤ��Ƥ���ޤ�������������script�����Ȥ��Ƶ����κǸ�˥��ԥڤ���С����Ȥ����̤˥�������Ž�դ��ƹԤ������ǡָ����Ƥ���ư���ץڡ���������夬��Ȥ����櫓�Ǥ���
�ʤ��������tips�� Firefox3, IE7, Safari3, Opera9, Chrome1 �ǥƥ��Ȥ��Ƥ���ޤ���
Enjoy!
Dan the Lazy JavaScripter
�ƤӽФ���̵̾�ʤΤ�q�äƤ���̾����Ĥ��Ƥ���ΤˤϤɤ�������̣������Τ������ġ�