JavaScriptã®æååãå転ããï¼ï¼ã®æ¹æ³ã¨ãã®ããã©ã¼ãã³ã¹
ã¯ããã«
JavaScriptã§æååãå転ããï¼ï¼ã®æ¹æ³ãï¼ç¡çç¢çï¼ï¼æãã¤ããã®ã§ãã¡ãã£ã¨ç°¡åã«ç´¹ä»ããããã¾ããããããã«ã¤ãã¦ãåãã©ã¦ã¶ã§ããã©ã¼ãã³ã¹ã測å®ãã¦ã¿ãã®ã§ããã®çµæãåããã¦è¼ããã
æååã®Stringãªãã¸ã§ã¯ãã«ã¯ãé¨ååãåºã(substring, slice)ãç½®æ(replace)ãé£çµ(concat)ãªã©è±å¯ãªæ©è½ãããã®ã«ãå転(reverse)æ©è½ã¯ãªããArrayã®reverseã¯ããã®ã«ãStringã®reverseããªãã®ã¯ã©ããã¦ãªã®ã ãããã
åãã©ã¦ã¶ã¨ãã®ãã¼ã¸ã§ã³ã¯ä»¥ä¸ã®éãï¼
| Chrome | Firefox | Opera | Safari | IE |
|---|---|---|---|---|
| 13.0.782.112 m | 6.0 | 11.50 | 5.1(7534.50) | 8.0.7600.16335 |
rev01: Cè¨èªççºæ³
空ã®é åãä½ã£ã¦ãããã«å ã®æååã®å¾ãããï¼æåã¤ã¥å ¥ãã¦ãã£ã¦ãæå¾ã«æååã¨ãã¦é£çµãããæ¥æ¬èªæåãªã©ãæ··å¨ãã¦ãã¦ãããã¡ããåé¡ãªãã
function rev01(s) { var rv = []; for (var i = 0, n = s.length; i < n; i++) { rv[i] = s[n - i - 1]; } return rv.join(""); }
çµæã¯ä»¥ä¸ã®ã°ã©ããæ¨ªè»¸ã¯æååã®é·ãã縦軸ã¯100åç¹°ãè¿ããã¨ãã«è¦ããæé(ããªç§)ã以éã®ã°ã©ããåæ§ã

IEã¯ä»ã®ãã©ã¦ã¶ã¨æ¯ã¹ã¦æããã«é ããã¦ãåãã¹ã±ã¼ã«ã®ã°ã©ãã§ã¯ã¯ã¿åºãã¦ãã¾ãã
rev02: JavaScriptåå¿è ççºæ³
rev01ã¨ã»ã¨ãã©åãã ããã©ãé åãä½ããªãã§ãæååã®ã¾ã¾ï¼ãªãã¬ã¼ã¿ã使ã£ã¦é£çµãã¦ããã
function rev02(s) { var rv = ""; for (var i = 0, n = s.length; i < n; i++) { rv = rv + s[n - i - 1]; } return rv; }
+=ãªãã¬ã¼ã¿ã使ãã¨å¤å°å¹çããããªãã ãããã
function rev02b(s) { var rv = ""; for (var i = 0, n = s.length; i < n; i++) { rv += s[n - i - 1]; } return rv; }


両è
ã«æ®ãã©éãã¯ãªãããFirefox㯠+= ã使ã£ãæ¹ãè¥å¹²éããªã£ãããã ã
ï¼ãªãã¬ã¼ã¿ã«ããæååã®é£çµã¯ãã¤ã¼ããªå®è£ ã®å ´åãæååããã®æç¹ã§ã³ãã¼ããã®ã§ãé常ã«é ãã¨ããå°è±¡ããããããã®è¾ºãã¯å·¥å¤«ãããã¦ããããã ãå®érev01ããé«éã«ãªã£ã¦ãããããããããã«ã¯çç±ãããã®ã§ãå¥ã®æ©ä¼ã«è§¦ãã¦ããããã
rev03: JavaScriptä¸ç´è ççºæ³
䏿åã¥ã¤é åã«ã°ããã¦ããã®é åãå転ãã¦ãæååã¨ãã¦çµåããããã¾ãã ãã©ãsplit, reverse, joinãªã©ã®é¢æ°ã®åå¨ãç¥ããªãã¨ä½ããªãã
function rev03(s) { return s.split("").reverse().join(""); }
æããããããæãçãã³ã¼ãã§ã®å®è£ ã ã¨æããããã©ã¼ãã³ã¹ãå®ç¨çã

rev04: 天éªé¬¼ççºæ³
æååãæåã³ã¼ãã®é
åã«å¤æãã¦ããããå転ãããã®ããæååãçæããã
ã¡ãã£ã¨é åããªæ¹æ³ãªã®ã§ãæ®éãããªã³ã¼ãã¯æ¸ããªãã¨æãã
function rev04(s) { return String.fromCharCode.apply(null, Array.prototype.map.call(s, function (x) { return x.charCodeAt(0); }).reverse()); }
IEã¯map颿°ãçµè¾¼ã¿ã§ã¯å®è£ ããã¦ããªããããªã®ã§æ¯è¼ããå¤ããï¼IEããªãã®ã¯ä»¥ä¸ãåæ§ï¼ã

rev05: æååã¯æåã®é åã ççºæ³
ãã£ã¦ãããã¨ã¯rev01ã¨åããããã«ãã¦ããforEachã¨ããååã¯ãã©ã³ã¹ãæªããeachã ãã§ããã®ã«ã¨æãã
function rev05(s) { var rv = []; Array.prototype.forEach.call(s, function (x) { rv.unshift(x); }); return "".concat.apply("", rv); }
unshift()颿°ã¯é
åã®å
é ã«è¦ç´ ãæ¿å
¥ããã®ã§ãã¤ã³ããã¯ã¹ã®æ¸ãæããå
¨ä½ã«æ¸¡ã£ã¦è¡ããããããå¹çãæªããã¨ãäºæ³ãããã
ããã§ãpush()ã§é
åã®æå¾ã«è¦ç´ ãæ¿å
¥ãã¦ãå
¨é¨push()ããå¾ã«reverse()ããæ¹ãå¹çãããã
function rev05b(s) { var rv = []; Array.prototype.forEach.call(s, function (x) { rv.push(x); }); return "".concat.apply("", rv.reverse()); }
çµæãè¦ã¦åããã¨ããã両è ã¯æ¡éãã«ããã©ã¼ãã³ã¹ãéãã


ã¡ãã£ã¨ããã§ãArray.prototypeã®ããããã£ã§å®ç¾©ããã¦ãã颿°ç¾¤ã«ã¤ãã¦è£è¶³ãã¦ããããArrayã®é¢æ°ã®ã»ã¨ãã©ã¯Arrayãªãã¸ã§ã¯ã以å¤ã«ãé©ç¨ã§ããã¸ã§ããªãã¯ãªé¢æ°ã§ãããã¤ã¾ããArrayã®ããã«ã¼ã以ä¸ã®æ´æ°å¤ï¼ã®æååï¼ãããããã£åã¨ãã¦åè¦ç´ ãã¢ã¯ã»ã¹ã§ãã¦ããã¤ãè¦ç´ æ°ãæå³ããlengthããããã£ããããããªãªãã¸ã§ã¯ãã§ããã°Arrayãªãã¸ã§ã¯ãã§ãªãã¦ãArrayã®é¢æ°ã¯é©ç¨ã§ãããæååãæ´æ°å¤ã§è¦ç´ ãã¢ã¯ã»ã¹ã§ãã¦lengthããããã£ãæã¤ã®ã§Arrayã®forEach颿°ã¯é©ç¨ã§ããã
Arrayã®é¢æ°ãæååã«å¯¾ãã¦é©ç¨ã§ãããªããArrayã®reverseãæååã«å¯¾ãã¦å®è¡ã§ããã®ã§ã¯ãããã¨æããããªããããã¯ã§ããªããArrayã®reverseã¯ç ´å£çreverseãªã®ã§ãããRubyã§è¨ãã°reverse!ãLispã§è¨ãã°nreverseã§ãããJavaScriptã®æååã¯immutable(è¦ç´ ã夿´ãããã¨ãã§ããªã)ãªã®ã§ç ´å£ãããã¨ã¯ã§ããªãã
rev06: Lispããã°ã©ãççºæ³
Lispã®æç§æ¸ã§æåã«ç»å ´ããå台颿°ãæããappendã¨reverseããã®reverseçã«æ¸ããã®ã以ä¸ãå¦çç³»ã«ãã£ã¦ã¯æååã®é·ããé·ãã¨ç°¡åã«ã¹ã¿ãã¯ãªã¼ãã¼ããã¼ãã¦ãã¾ãã
function rev06(s) { return s.length <= 1 ? s : rev06(s.substring(1)) + s[0]; }

Lispã§ãããã«ç¸å½ãããã®ã¯ã¹ãã¼ãªãã¼ã¹ã¨å¼ã°ãã¦ãããããã ãããæ¬å½ã«é ããFirefoxã®ç·ãéä¸ãããªãã®ã¯ãã¹ã¿ãã¯ãªã¼ãããã¼ãçºçãã¦ããããï¼ä»¥éã®ã°ã©ããåæ§ï¼ãIEã¯è¨æ¸¬ä¸è½ãªãããé ããããã«ãã¦ããChromeãé ãããã®ã¯ã©ããããã¨ãã
rev07: ã·ã§ã¼ã«ã¼ã½ã¼ãççºæ³
rev06ã¨ä¼¼ã¦ããããã©ãå é ã¨æå¾ã®æåã交æãã¦ããã®éã«æã¾ããé¨åæååãå帰çã«å転ãã¦ä¸è ãçµåãããã·ã§ã¼ã«ã¼ã½ã¼ãã¨ã¯å ¨ç¶é¢ä¿ãªãããã©ãåæ¹åããçãã¦ããã¤ã¡ã¼ã¸ãä¼¼ã¦ããããããã®ååã使ã£ãã
function rev07(s) { return (s.length < 2) ? s : s[s.length - 1] + rev07(s.substring(1, s.length - 1)) + s[0]; }
rev06ã¨ã¡ãã£ã¨éãã ããªã®ã«ãOperaãæ¥µç«¯ã«é ããªã£ã¦ããã

rev08: åå²çµ±æ²»æ³ççºæ³
ãæååãå·¦å³ååã«åãã¦å·¦å³ã交æãã¦çµåããããå·¦å³ããããã«ã¤ãã¦å帰çã«è¡ãã
function rev08(s) { var m = s.length >> 1; if (m == 0) { return s; } else { return rev08(s.substring(m)) + rev08(s.substring(0, m)); } }
ããã°ã©ãã³ã°ãè¦ããã¦ã®é ã¯ããã®ãããªå帰çãªã³ã¼ããè¦ãã¨ãã©ããã¦ãã®ãããªå®£è¨çãªè¨è¿°ã§çµæãå¾ãããã®ã䏿è°ãªæããããã
ã¡ãªã¿ã«ãs.lengthã®ååãå¾ãã®ã«ã·ããæ¼ç®åã使ã£ã¦ããã®ã¯ãçµæãæ´æ°å¤ã«ãªãããã«ããããã

rev09: æ£è¦è¡¨ç¾ä½¿ãã®åå±ççºæ³
çºæ³ã¯rev06ã¨åãã ããã©ãæ£è¦è¡¨ç¾ã使ã£ã¦å é æåã¨æ®ããåãåºãã¦ãããreplaceã®ç¬¬ï¼å¼æ°ã®é¢æ°ã®ä¸ã§å帰ãã¦ãããã¤ã¾ããç §åããæååï¼ãã®å ´åæååå ¨ä½ï¼ãå転ããæåã§ç½®ãæãã¦ããããããªç¡é§ãªãã¨ã¯èª°ãããªãã¨æããã
function rev09(s) { return s.replace(/^(.)(.*)$/, function (s, s1, s2) { return rev09(s2) + s1; }); }
æå¾ã®ï¼æåãåãåºãæ¹å¼ã«ããã¨ä»¥ä¸ã®ããã«ãªãã
function rev09b(s) { return s.replace(/^(.*)(.)$/, function (s, s1, s2) { return s2 + rev09b(s1); }); }
ãããããã«ã¹ã¿ãã¯ãªã¼ãã¼ããã¼ãã¦ãã¾ãã両è ã«ããã©ã¼ãã³ã¹ã®å¤§ããªéãã¯ãªãããã ã


rev10: 颿°åè¨èªä½¿ãççºæ³
颿°åè¨èªã§ã¯mapã¨reduceãåºæ¬çãªé«é颿°ã¨ãã¦ç»å ´ãããããã®reduce颿°ã¨ä¼¼ããããªåä½ãããArrayã®reduce颿°ã使ãã¨ä»¥ä¸ã®ããã«ç°¡åã«æ¸ãããArrayã®reduceã¯ã¸ã§ããªãã¯ã§ããã®ã§æååã«ãé©ç¨ã§ãããreduceã®ç¬¬ï¼å¼æ°ã®é¢æ°ã¯å¼æ°ãï¼åã¨ãããããã§ã¯å¿ è¦ãªãã®ã§çç¥ãã¦ãããinitialValueã«ç©ºæåãæç¤ºçã«æå®ãã¦ããã®ã¯ãsã空æåã®ã¨ããèæ ®ãããã®ã
function rev10(s) { return Array.prototype.reduce.call(s, function (prev, curr) { return curr + prev; }, ""); }
ã¾ãããªã¹ãã®å³ããé ã«é©ç¨ãã¦ããreduceRight()ã使ãã¨ãæååå転ã¯ä»¥ä¸ã®ããã«ãªãã
function rev10b(s) { return Array.prototype.reduceRight.call(s, function (prev, curr) { return prev + curr; }, ""); }
æåååè»¢ã®æ§åããã¬ã¼ã¹ããã¨ããããªæãã
rev10("abcde") => "a" + "" => "b" + "a" => "c" + "ba" => "d" + "cba" => "e" + "dcba" => "edcba" rev10b("abcde") => "" + "d" => "e" + "d" => "ed" + "c" => "edc" + "b" => "edcb" + "a" => "edcba"
両è ã§ããã©ã¼ãã³ã¹ä¸ã®å¤§ããªéãã¯ãªãããã«æããããOperaã§ã¯å¤§ããªéããçºçããã


ãããã«
çµå±ã®ã¨ããããrev02: JavaScriptåå¿è ççºæ³ãã®ãã®ããã©ã¦ã¶éã®å·®ç°ãèæ ®ããã¨ãä¸çªé«éã§ããããã ããã ããããã§ã¯æååã®é£çµã主è¦ãªé¨åãå ãã¦ããããå¦çç³»ã®å®è£ ã«ãã£ã¦ã¯æååã®é£çµã¯å®éã«ã¯ãã®æç¹ã§ã¯é£çµããªãã§ããªã¹ãã®ããã«ãã£ã³ã¯ã¨ãã¦ç¹ãã¦ããã¨ãããã®ãããããã®ãããæååã®å転èªä½ã¯é«éã«è¦ãã¦ãããã®å¾ãè¦ç´ ãã¢ã¯ã»ã¹ããã¨ãã«å®éã®é£çµãçºçãã¦ããããé ãã¨ããå¯è½æ§ãèãããããããããããã§ããã©ã¼ãã³ã¹è©ä¾¡ãããããªæ°åæåãè¶ ãããããªæååãæ±ãã±ã¼ã¹ã¯ç¨ã§ããããããåé¡ã«ãªããã¨ã¯å®ç¨ä¸ã»ã¨ãã©ãªãã¨æãããããããã«ã¤ãã¦ã¯å¥ã®æ©ä¼ã§ç´¹ä»ãããï¼rev06ã§Chromeãé ãçç±ãããã«ããã®ã§ã¯ãªããã¨æ³åãã¦ããï¼ã
åã¯ããã°ã©ãã³ã°ãè¦ããã¦ã®æã®åæ©çãªã¢ã«ã´ãªãºã ã®ãã¯ããã¯ã®å¤ãã¯Lispããå¦ãã ããªã¹ãã®å転ãä¸¦ã³æ¿ããªã©ã®ç°¡åãªã³ã¼ããæ¸ãã¦ããã ãã§ã楽ããã£ããããããç´ æ´ãªæ¥½ããã¨ããã®ã¯ãä»ã§ãæã¡ç¶ãã¦ããããããããããã£ã¨å¤ãããªããã ããã¨æãã