å
容
Tsu-liãšTsu-suã¯ãæ°ããããã°ã©ã ã®èŠæš¡ãèªã£ãŠããŸããã ãäºåäžè¡ããšããªã¯èšã£ããããã³ã¡ã³ãã¯æ°ããŸããïŒããã¹ã¯çããŸããïŒãPf-fãç§ã¯ã»ãŒçŸäžè¡ã§ãã ãã¹ã¿ãŒãŠã³ãã¯ããç§ã®æé«ã®ããã°ã©ã ã¯500è¡ãããããšèªã£ãã ãããèããŠãããªãšãã¹ã¯æããçµéšããŸããã
ãããŸãã¹ã¿ãŒãããã°ã©ãã³ã°æ¬
ããã°ã©ã ããã«ãããã«ã¯ã2ã€ã®æ¹æ³ããããŸãã1ã€ã¯æããã«ãšã©ãŒãçºçããªãã»ã©åçŽã«ããæ¹æ³ããã1ã€ã¯æãããªãšã©ãŒãçºçããªãã»ã©è€éã«ããæ¹æ³ã§ãã
ã¢ã³ãœããŒã»ãã¢ã1980幎ãã¥ãŒãªã³ã°ã»ã¬ã¯ãã£ãŒ
倧ããªããã°ã©ã ã¯ã³ã¹ãã®ãããããã°ã©ã ã§ãããäœæãããæéã ãã§ã¯ãããŸããã éåžžã倧ããªãµã€ãºã¯è€éããæå³ããè€éãã¯ããã°ã©ããæ··ä¹±ãããŸãã æ··ä¹±ããããã°ã©ããŒã¯ãããã°ã©ã ã«ééããç¯ããŸãã 倧ããªããã°ã©ã ãšã¯ããã°ãé ãå ŽæããããèŠã€ããã®ãé£ããããšãæå³ããŸãã
å°å
¥éšãã2ã€ã®äŸã«ç°¡åã«æ»ããŸãããã 1ã€ç®ã¯èªçµŠèªè¶³ã§ã6è¡ããããŸãã
var total = 0, count = 1; while (count <= 10) { total += count; count += 1; } console.log(total);
2çªç®ã¯2ã€ã®å€éšé¢æ°ã«åºã¥ããŠããã1è¡ãå æããŸãã
console.log(sum(range(1, 10)));
ééãã«ééããå¯èœæ§ãé«ãã®ã¯ã©ãã§ããïŒ
åèšãšç¯å²ã®å®çŸ©ã®ãµã€ãºã远å ãããšã2çªç®ã®ããã°ã©ã ã倧ãããªããæåã®ããã°ã©ã ãã倧ãããªããŸãã ããããç§ã¯ãããæ£ãããšæãããŸãã
ããã¯ããœãªã¥ãŒã·ã§ã³ã®è¡šçŸã解決ãããåé¡ã«çŽæ¥é¢ä¿ããããã§ãã æ°å€ééã®åèšã¯ããµã€ã¯ã«ãšã«ãŠã³ã¿ãŒã§ã¯ãããŸããã ãããã¯éãšã®ã£ããã§ãã
ãã®èŸæžã®å®çŸ©ïŒåèšããã³ç¯å²é¢æ°ïŒã«ã¯ãã«ãŒããã«ãŠã³ã¿ãŒãããã³ãã®ä»ã®ã©ã³ãã ãªè©³çްãå«ãŸããŸãã ããããããã°ã©ã å
šäœãããåçŽãªæŠå¿µã衚çŸããŠãããããæ£ããå®è¡ããã®ãç°¡åã§ãã
æœè±¡å
ããã°ã©ã ã®ã³ã³ããã¹ãã§ã¯ããããã®ãèŸæžãå®çŸ©ã¯ãã°ãã°æœè±¡åãšåŒã°ããŸãã æœè±¡åã¯è©³çްãé ããããé«ãããŸãã¯ããæœè±¡çãªã¬ãã«ã§ã¿ã¹ã¯ã«ã€ããŠè©±ãæ©äŒãäžããŠãããŸãã
ãšã³ããŠè±ã¹ãŒãã®2ã€ã®ã¬ã·ããæ¯èŒããŸãã
ããŠã«ã«ãµãŒãã³ã°ããšã«ä¹Ÿç¥ãšã³ããŠè±ã®ã«ããã远å ããŸãã ãšã³ããŠè±ãèŠãããã«æ°Žãå ããŸãã å°ãªããšã12æéã¯ãã®ãŸãŸã«ããŠãããŸãã æ°Žãããšã³ããŠè±ãåãé€ããéã«å
¥ããŸãã ãµãŒãã³ã°ããšã«æ°Ž4ã«ããã远å ããŸãã ãã©ã€ãã³ãéããŠããšã³ããŠè±ã2æéç
®ãŸãã ãµãŒãã³ã°ããšã«ã¿ããã®ã®ååãåããŸãã ãã€ãã§çްããåããè±ã«å ããŸãã ãµãŒãã³ã°ããšã«ã»ããªã®1ã€ã®èãåãã ãã€ãã§çްããåããè±ã«å ããŸãã ãµãŒãã³ã°ããšã«ãã³ãžã³ãåãã ãã€ãã§çްããåããè±ã«å ããŸãã ããã«10åç
®ãã2çªç®ã®ã¬ã·ãïŒ
ãµãŒãã³ã°ããšïŒ1ã«ããã®ä¹Ÿç¥ãšã³ããŠè±ãååã®ã¿ããã®ãã»ããªã®èããã³ãžã³ã
ãšã³ããŠã12æé浞ããŸãã ãµãŒãã³ã°ããšã«æ°Ž4ã«ããã§2æéç
®èŸŒã¿ãŸãã éèãã«ããããŠè¿œå ããŸãã ããã«10åç
®ãã2çªç®ã®æ¹æ³ã¯ããçãç°¡åã§ãã ããããæçã«é¢é£ããæŠå¿µãããå°ãç¥ã£ãŠããå¿
èŠããããŸã-浞挬ãã·ãã¥ãŒãã«ããã£ã³ã°ïŒããã³éèïŒã
ããã°ã©ãã³ã°ãããšããå¿
èŠãªåèªããã¹ãŠèŸæžã«ãããšããäºå®ã«é Œãããšã¯ã§ããŸããã ãã®ãããæåã®ã¬ã·ãã®ãã¿ãŒã³ã«æ»ã蟌ãããšãã§ããŸãã圌ãã衚çŸããããé«ãã¬ãã«ã®æŠå¿µã«æ°ä»ãããšãªããã³ã³ãã¥ãŒã¿ãŒã«ãã¹ãŠã®å°ããªã¹ããããæ¬¡ã
ãšæç€ºããŸãã
ããã°ã©ããŒã®2çªç®ã®æ§è³ªã¯ãæŠå¿µãæ°ããèšèãæãã€ããŠæœè±¡åããããšãæ±ãããšãã«æ°ä»ãèœåã§ããã¹ãã§ãã
æœè±¡é
åãã©ããŒãµã«
以åã«äœ¿çšããåçŽãªé¢æ°ã¯ãæœè±¡åã®æ§ç¯ã«é©ããŠããŸãã ããããæã«ã¯ååã§ã¯ãããŸããã
åã®ç« ã§ããã®ãµã€ã¯ã«ãæ°åèŠãŸããã
var array = [1, 2, 3]; for (var i = 0; i < array.length; i++) { var current = array[i]; console.log(current); }
ã³ãŒãã¯ããé
åå
ã®åèŠçŽ ã«ã€ããŠããããã³ã³ãœãŒã«ã«åºåããŸãããšèšããŸãã ããããåé¿çã䜿çšããŸã-iãã«ãŠã³ãããé
åã®é·ãããã§ãã¯ãã远å ã®å€æ°currentã宣èšããããã®å€æ°ã䜿çšããŸãã 圌ã¯éåžžã«ãã³ãµã ã§ã¯ãªãã ãã§ãªããæœåšçãªééãã®åºç€ã«ããªã£ãŠããŸãã é·ããæžã蟌ã代ããã«å€æ°iã誀ã£ãŠåå©çšãããã倿°iãšcurrentãæ··åãããããå¯èœæ§ããããŸãã
颿°ã«æœè±¡åããŸãããã ãããè¡ãæ¹æ³ãèããããŸããïŒ
é
åãèµ°æ»ããconsole.logã®åèŠçŽ ãåŒã³åºã颿°ãèšè¿°ããã®ã¯éåžžã«ç°¡åã§ã
function logEach(array) { for (var i = 0; i < array.length; i++) console.log(array[i]); }
ããããã³ã³ãœãŒã«ã«èŠçŽ ã衚瀺ãã以å€ã®ããšãããå¿
èŠãããå Žåã¯ã©ãã§ããããïŒ ãäœãããããããšã¯é¢æ°ãšããŠè¡šãããšãã§ãã颿°ã¯åãªã倿°ãªã®ã§ããã®ã¢ã¯ã·ã§ã³ãåŒæ°ãšããŠæž¡ãããšãã§ããŸãã
function forEach(array, action) { for (var i = 0; i < array.length; i++) action(array[i]); } forEach(["", "", ""], console.log);
å€ãã®å Žåãå®çŸ©æžã¿ã®é¢æ°ãforEachã«æž¡ãããšã¯ã§ããŸãããããã®å Žã§é¢æ°ãäœæã§ããŸãã
var numbers = [1, 2, 3, 4, 5], sum = 0; forEach(numbers, function(number) { sum += number; }); console.log(sum);
ã«ãŒãæ¬äœããããã¯ã§èšè¿°ããããå€å
žçãªforã«ãŒãã®ããã«èŠããŸãã ãã ããçŸåšã¯æ¬äœã¯é¢æ°å
ã«ãããforEachåŒã³åºããã©ã±ããå
ã«ããããŸãã ãããã£ãŠãäžæ¬åŒ§ãšæ¬åŒ§ã®äž¡æ¹ã§éããå¿
èŠããããŸãã
ãã®ãã³ãã¬ãŒãã䜿çšããŠãçŸåšã®é
åèŠçŽ ã®å€æ°åïŒæ°å€ïŒãèšå®ã§ããŸããé
åããæåã§éžæããå¿
èŠã¯ãããŸããã
äžè¬çã«ãç§ãã¡ã¯èªåèªèº«ã§æžãå¿
èŠãããããŸããã ããã¯é
åã®æšæºçãªæ¹æ³ã§ãã é
åã¯äœæ¥äžã®å€æ°ãšããŠæ¢ã«æž¡ãããŠãããããforEachã¯åŒæ°ã1ã€ã ãåãå
¥ããŸããåèŠçŽ ã«å¯ŸããŠå®è¡ããå¿
èŠããã颿°ã§ãã
ãã®ã¢ãããŒãã®äŸ¿å©ãã瀺ãããã«ãåã®ç« ã®é¢æ°ã«æ»ããŸãããã é
åãééãã2ã€ã®ãµã€ã¯ã«ãå«ãŸããŸãã
function gatherCorrelations(journal) { var phis = {}; for (var entry = 0; entry < journal.length; entry++) { var events = journal[entry].events; for (var i = 0; i < events.length; i++) { var event = events[i]; if (!(event in phis)) phis[event] = phi(tableFor(event, journal)); } } return phis; }
forEachã䜿çšããŠãå°ãçãèšé²ããŸãã
function gatherCorrelations(journal) { var phis = {}; journal.forEach(function(entry) { entry.events.forEach(function(event) { if (!(event in phis)) phis[event] = phi(tableFor(event, journal)); }); }); return phis; }
é«é颿°
ä»ã®é¢æ°ãæäœãã颿°ïŒåŒæ°ãšããŠäœ¿çšãããè¿ã
颿°ïŒã¯ã
é«é颿°ãšåŒã°ã
ãŸã ã 颿°ãåãªã倿°ã§ããããšãæ¢ã«çè§£ããŠããå Žåããã®ãããªé¢æ°ã®ååšã«ã€ããŠç¹å¥ãªããšã¯ãããŸããã ãã®çšèªã¯æ°åŠã«ç±æ¥ããŸããæ°åŠã§ã¯ã颿°ãšä»ã®æå³ã®éããããå³å¯ã«èªèãããŸãã
é«é颿°ã䜿çšãããšãå€ã ãã§ãªãã¢ã¯ã·ã§ã³ãæœè±¡åã§ããŸãã 圌ãã¯éããŸãã ããšãã°ãæ°ãã颿°ãäœæãã颿°ãäœæã§ããŸãã
function greaterThan(n) { return function(m) { return m > n; }; } var greaterThan10 = greaterThan(10); console.log(greaterThan10(11));
ä»ã®æ©èœã倿Žããæ©èœãäœæã§ããŸãã
function noisy(f) { return function(arg) { console.log("calling with", arg); var val = f(arg); console.log("called with", arg, "- got", val); return val; }; } noisy(Boolean)(0);
æ°ããã¿ã€ãã®ããã°ã©ã ãããŒå¶åŸ¡ãäœæãã颿°ãäœæããããšãã§ããŸãã
function unless(test, then) { if (!test) then(); } function repeat(times, body) { for (var i = 0; i < times; i++) body(i); } repeat(3, function(n) { unless(n % 2, function() { console.log(n, "is even"); }); });
ãã®ãããªå Žåã第3ç« ã§èª¬æããã¬ãã·ã«ã«ã¹ã³ãŒãã«ãŒã«ã圹ç«ã¡ãŸãã æåŸã®äŸã§ã¯ã倿°nã¯å€éšé¢æ°ãžã®åŒæ°ã§ãã å
åŽã®é¢æ°ã¯å€åŽã«å²ãŸããŠãããããnã䜿çšã§ããŸãã ãã®ãããªå
éšé¢æ°ã®æ¬äœã¯ãããããåãå·»ã倿°ã«ã¢ã¯ã»ã¹ã§ããŸãã ãããã¯ãéåžžã®ã«ãŒãããã³æ¡ä»¶åŒã§äœ¿çšããããããã¯{}ã®åœ¹å²ãæããããšãã§ããŸãã éèŠãªéãã¯ãå
éšé¢æ°å
ã§å®£èšããã倿°ãå€éšç°å¢ã«åé¡ãããªãããšã§ãã éåžžãããã¯æé«ã®å Žåã®ã¿ã§ãã
åŒæ°ãæž¡ã
åã«å®£èšãããå¥ã®é¢æ°ã«åŒæ°ãæž¡ããã€ãºã®å€ã颿°ã¯ãå®å
šã«äŸ¿å©ã§ã¯ãããŸããã
function noisy(f) { return function(arg) { console.log("calling with", arg); var val = f(arg); console.log("called with", arg, "- got", val); return val; }; }
fãè€æ°ã®ãã©ã¡ãŒã¿ãŒãåãå Žåãæåã®ãã©ã¡ãŒã¿ãŒã®ã¿ãåãåããŸãã å
éšé¢æ°ïŒarg1ãarg2ãªã©ïŒã«å€æ°ã®åŒæ°ã远å ããŠãããããã¹ãŠãfã«æž¡ãããšã¯å¯èœã§ãããã©ãã ãã®éã§ååãã¯ããããŸããã ããã«ã颿°fã¯arguments.lengthã§æ£ããåäœã§ããŸããã§ããã åžžã«åãæ°ã®åŒæ°ãæž¡ããããæåã«ããã€ã®åŒæ°ãäžãããããã¯ããããŸããã
ãã®ãããªå ŽåãJavaScriptã®é¢æ°ã«ã¯applyã¡ãœããããããŸãã åŒæ°ã®é
åïŒãŸãã¯é
åã®åœ¢åŒã®ãªããžã§ã¯ãïŒãåœŒã«æž¡ããã圌ã¯ãããã®åŒæ°ã§é¢æ°ãåŒã³åºããŸãã
function transparentWrapping(f) { return function() { return f.apply(null, arguments); }; }
ãã®é¢æ°ã¯åœ¹ã«ç«ããªãããèå³ã®ãããã³ãã¬ãŒãã瀺ããŠãã-ããã«ãã£ãŠè¿ããã颿°ã¯ãåãåã£ããã¹ãŠã®åŒæ°ãfã«æž¡ããããã以äžã¯äœãããªãã ããã¯ãåŒæ°ãªããžã§ã¯ãã«æ ŒçŽãããŠããç¬èªã®åŒæ°ãapplyã¡ãœããã«æž¡ãããšã§çºçããŸãã applyã¡ãœããã®æåã®åŒæ°ïŒãã®å Žåã¯nullã«èšå®ïŒã¯ãã¡ãœããåŒã³åºãããšãã¥ã¬ãŒãããããã«äœ¿çšã§ããŸãã æ¬¡ã®ç« ã§ãã®åé¡ã«æ»ããŸãã
ãžã§ã³ãœã³
JavaScriptã«ã¯ãäœããã®æ¹æ³ã§é
åèŠçŽ ã«é¢æ°ãé©çšãã髿¬¡é¢æ°ãåºãæ®åããŠããŸãã forEachã¡ãœããã¯ããããã®é¢æ°ã®äžã§æãåå§çãªãã®ã®1ã€ã§ãã é
åã¡ãœãããšããŠã颿°ã®ä»ã®å€ãã®ãªãã·ã§ã³ã«ã¢ã¯ã»ã¹ã§ããŸãã ããããç¥ãããã«ãå¥ã®ããŒã¿ã»ããã§éãã§ã¿ãŸãããã
æ°å¹Žåã誰ããå€ãã®ã¢ãŒã«ã€ãã調ã¹ãŠãç§ã®å§ã®æŽå²ã«é¢ããæ¬å
šäœãäœæããŸããã éšå£«ãæµ·è³ãé¬éè¡åž«ãèŠã€ããããšãæåŸ
ããŠãç§ã¯ãããéããŸãã...ããããããã¯äž»ã«ãã©ã³ãã«ã®èŸ²æ°ã§æºããããŠããããšã倿ããŸããã 嚯楜ã®ããã«ãç§ã¯çŽæ¥ã®å
ç¥ã«é¢ããæ
å ±ãæœåºããã³ã³ãã¥ãŒã¿ãŒã§èªãã®ã«é©ãã圢åŒã§èšèšããŸããã
ãã¡ã€ã«ã¯æ¬¡ã®ããã«ãªããŸãã
[ {"name": "Emma de Milliano", "sex": "f", "born": 1876, "died": 1956, "father": "Petrus de Milliano", "mother": "Sophia van Damme"}, {"name": "Carolus Haverbeke", "sex": "m", "born": 1832, "died": 1905, "father": "Carel Haverbeke", "mother": "Maria van Brussel"}, ⊠]
ãã®åœ¢åŒã¯JSONãšåŒã°ããJavaScript Object Notationãæå³ããŸãã ããŒã¿ã¹ãã¬ãŒãžããã³ãããã¯ãŒã¯éä¿¡ã§åºã䜿çšãããŠããŸãã
JSONã¯ãé
åãšãªããžã§ã¯ãã®èšè¿°æ¹æ³ãJavaScriptã«äŒŒãŠããŸãããããã€ãã®å¶éããããŸãã ãã¹ãŠã®ããããã£åã¯äºéåŒçšç¬Šã§å²ãå¿
èŠããããåçŽãªå€ã®ã¿ãèš±å¯ãããŸãã颿°åŒã³åºãã倿°ãèšç®ãå«ãŸãªããã®ã¯èš±å¯ãããŸããã ã³ã¡ã³ããèš±å¯ãããŠããŸããã
JavaScriptã¯ãããŒã¿ããã®åœ¢åŒãããã®åœ¢åŒã«å€æããJSON.stringifyããã³JSON.parse颿°ãæäŸããŸãã æåã¯å€ãåãåããJSONã§æååãè¿ããŸãã 2çªç®ã¯ãã®ãããªè¡ãåããå€ãè¿ããŸãã
var string = JSON.stringify({name: "X", born: 1980}); console.log(string);
ANCESTRY_FILE倿°
ã¯ããããå
¥æã§ããŸã ã JSONãã¡ã€ã«ãæååãšããŠå«ãŸããŠããŸãã ããããã³ãŒãããŠãèšåãããäººã®æ°ãæ°ããŸãããã
var ancestry = JSON.parse(ANCESTRY_FILE); console.log(ancestry.length);
é
åããã£ã«ã¿ãŒåŠçãã
1924幎ã«è¥ã人ãèŠã€ããã«ã¯ãæ¬¡ã®æ©èœã圹ç«ã¡ãŸãã ãã¹ãã«å€±æããé
åã®èŠçŽ ãé€å€ããŸãã
function filter(array, test) { var passed = []; for (var i = 0; i < array.length; i++) { if (test(array[i])) passed.push(array[i]); } return passed; } console.log(filter(ancestry, function(person) { return person.born > 1900 && person.born < 1925; }));
testãšããåŒæ°ã䜿çšãããŸã-ããã¯æ€èšŒèšç®ãå®è¡ãã颿°ã§ãã åèŠçŽ ã«å¯ŸããŠåŒã³åºãããããã«ãã£ãŠè¿ãããå€ã¯ããã®èŠçŽ ãè¿ãããé
åã«å
¥ããã©ãããæ±ºå®ããŸãã
ãã¡ã€ã«ã«ã¯ã1924幎ã«è¥ãç¥ç¶ãç¥æ¯ãããšãã®3人ãããŸããã
ãã£ã«ã¿ãŒé¢æ°ã¯ãæ¢åã®é
åããèŠçŽ ãåé€ããã®ã§ã¯ãªããæ€èšŒãããèŠçŽ ã®ã¿ãå«ãæ°ããèŠçŽ ãäœæããããšã«æ³šæããŠãã ããã ããã¯ãæž¡ãããé
åãæãªããªããããçŽç²ãªé¢æ°ã§ãã
forEachãšåæ§ã«ããã£ã«ã¿ãŒã¯æšæºã®é
åã¡ãœããã®1ã€ã§ãã ãã®äŸã§ã¯ãå
éšã§äœãè¡ããã瀺ãããã ãã«ããã®ãããªé¢æ°ã説æããŸããã ããããã¯ãåçŽã«äœ¿çšããŸãã
onsole.log(ancestry.filter(function(person) { return person.father == "Carel Haverbeke"; }));
ãããã䜿çšãã倿
ç¥å
ã®é
åããã£ã«ã¿ãªã³ã°ããããšã«ãã£ãŠååŸãããã人ã
ã衚ããªããžã§ã¯ãã®ã¢ãŒã«ã€ãããããšããŸãã ããããèªã¿ãããååã®é
åãå¿
èŠã§ãã
mapã¡ãœããã¯ããã¹ãŠã®èŠçŽ ã«é¢æ°ãé©çšããè¿ãããå€ããæ°ããé
åãäœæããããšã«ãããé
åã倿ããŸãã æ°ããé
åã®é·ãã¯å
¥åãšåãã§ããããã®å
å®¹ã¯æ°ãã圢åŒã«å€æãããŸãã
function map(array, transform) { var mapped = []; for (var i = 0; i < array.length; i++) mapped.push(transform(array[i])); return mapped; } var overNinety = ancestry.filter(function(person) { return person.died - person.born > 90; }); console.log(map(overNinety, function(person) { return person.name; }));
è峿·±ãããšã«ãå°ãªããšã90æ³ä»¥äžã®äººã¯ã1920幎代ã®è¥ã人ãã¡ãšåãã§ãã ããã¯ç§ã®èšé²ã®ææ°äžä»£ã§ãã ã©ããããè¬ã¯çå£ã«æ¹åãããŸããã
forEachããã£ã«ã¿ãŒãšåæ§ã«ãmapãé
åã®æšæºçãªæ¹æ³ã§ãã
reduceã䜿çšããåèš
é
åãæ±ããã1ã€ã®äžè¬çãªäŸã¯ãé
åå
ã®ããŒã¿ã«åºã¥ããŠåäžã®å€ãååŸããããšã§ãã 1ã€ã®äŸã¯ããã§ã«ããç¥ãããŠããæ°åã®ãªã¹ãã®åèšã§ãã ãã1ã€ã¯ã誰ãããå
ã«çãŸããäººãæ€çŽ¢ããããšã§ãã
ãã®ã¿ã€ãã®é«æ¬¡ã®æäœã¯ãreduceïŒreductionïŒãŸãã¯ãfoldãfoldingïŒãšåŒã°ããŸãïŒã äžåºŠã«1ã€ã®èŠçŽ ã®é
åãæãç³ãããã«æ³åã§ããŸãã æ°å€ãåèšãããšãããŒãããéå§ããåèŠçŽ ã«ã€ããŠãå ç®ã䜿çšããŠçŸåšã®åèšãšçµåããŸããã
reduce颿°ã®ãã©ã¡ãŒã¿ãŒã¯ãé
åã«å ããŠãçµå颿°ãšåæå€ã§ãã ãã®é¢æ°ã¯ããã£ã«ã¿ãŒãããããããæç¢ºæ§ãäœãããã现å¿ã®æ³šæãæã£ãŠãã ããã
function reduce(array, combine, start) { var current = start; for (var i = 0; i < array.length; i++) current = combine(current, array[i]); return current; } console.log(reduce([1, 2, 3, 4], function(a, b) { return a + b; }, 0));
æšæºã®é
åã®åæžæ¹æ³ã¯ããã¡ããåãããã«æ©èœããŸãããããã«äŸ¿å©ã§ãã é
åã«å°ãªããšã1ã€ã®èŠçŽ ãå«ãŸããå ŽåãstartåŒæ°ãçç¥ã§ããŸãã ãã®ã¡ãœããã¯ãé
åã®æåã®èŠçŽ ãéå§å€ãšããŠåãåãã2çªç®ããäœæ¥ãéå§ããŸãã
reduceã§ç¥ãããæå€ã®ç¥å
ãèŠã€ããããã«ã次ã®ããã«æžãããšãã§ããŸãïŒ
console.log(ancestry.reduce(function(min, cur) { if (cur.born < min.born) return cur; else return min; }));
ã³ã³ããŒã¶ããªãã£
é«é颿°ã䜿çšããã«ãå
ã®äŸïŒçå¹Žææ¥ãæãæ©ãäººãæ€çŽ¢ããïŒãã©ã®ããã«èšè¿°ã§ããŸããïŒ å®éãã³ãŒãã¯ããã»ã©ã²ã©ããã®ã§ã¯ãããŸããã
var min = ancestry[0]; for (var i = 1; i < ancestry.length; i++) { var cur = ancestry[i]; if (cur.born < min.born) min = cur; } console.log(min);
倿°ãå°ãå€ãã2è¡é·ããªããŸããããããŸã§ã®ãšãããã³ãŒãã¯ããªãæç¢ºã§ãã
颿°ãçµã¿åãããå¿
èŠãããå Žåãé«é颿°ã¯æ¬åœã«éããŸãã ããšãã°ãã»ããå
ã®ç·æ§ãšå¥³æ§ã®å¹³å幎霢ãèŠã€ããã³ãŒããèšè¿°ããŸãã
function average(array) { function plus(a, b) { return a + b; } return array.reduce(plus) / array.length; } function age(p) { return p.died - p.born; } function male(p) { return p.sex == "m"; } function female(p) { return p.sex == "f"; } console.log(average(ancestry.filter(male).map(age)));
ïŒå ç®ããã©ã¹é¢æ°ãšããŠå®çŸ©ããå¿
èŠãããã®ã¯ã°ãããŠããŸãããJavaScriptã®æŒç®åã¯å€ã§ã¯ãªããããåŒæ°ãšããŠæž¡ãããšã¯ãããŸããïŒã
ã¢ã«ãŽãªãºã ãå€§èŠæš¡ãªãµã€ã¯ã«ã«åã蟌ã代ããã«ãæ§å¥ã®æ±ºå®ã幎霢ã®ã«ãŠã³ããæ°å€ã®å¹³ååãªã©ãé¢å¿ã®ããæŠå¿µã«åŸã£ãŠãã¹ãŠãé
åžãããŸãã ããããé çªã«é©çšããŠçµæãååŸããŸãã
ããããããã³ãŒãã®å Žåãããã¯çŽ æŽãããæ©äŒã§ãã ãã¡ãããæå¿«ãã¯ç¡æã§ã¯ãããŸããã
äŸ¡æ Œ
ãšã¬ã¬ã³ããªã³ãŒããšçŸããè¹ã®å¹žããªåå°ã«ãInefficiencyãšããååã®æŽŸæãªã¢ã³ã¹ã¿ãŒãããŸãã
é
åãåŠçããããã°ã©ã ã¯ãæç¢ºã«åé¢ãããäžé£ã®ã¹ããããšããŠæãçŸãã衚çŸãããŸããåã¹ãããã¯ãé
åã§äœããå®è¡ããæ°ããé
åãè¿ããŸãã ããããããããã¹ãŠã®äžéé
åãéå±€åããããšã¯é«äŸ¡ã§ãã
åæ§ã«ã颿°ãforEachã«æž¡ããŠé
åãééãããã®ã¯äŸ¿å©ã§çè§£ããããã§ãã ãã ããJavaScriptã§é¢æ°ãåŒã³åºãããšã¯ãã«ãŒããããé«äŸ¡ã§ãã
ããã¯ãããã°ã©ã ã®èªã¿ããããåäžãããå€ãã®ææ³ã«ãåœãŠã¯ãŸããŸãã æœè±¡åã¯ãã³ã³ãã¥ãŒã¿ãŒã®ã¯ãªãŒã³ãªäœæ¥ãšäœæ¥ããæŠå¿µã®éã«ã¬ã€ã€ãŒã远å ããŸãããã®çµæãã³ã³ãã¥ãŒã¿ãŒã¯ããå€ãã®äœæ¥ãè¡ããŸãã ããã¯å³å¯ãªã«ãŒã«ã§ã¯ãããŸãã-å¹çãç ç²ã«ããããšãªãæœè±¡åã远å ã§ããèšèªããããJavaScriptã§ãããçµéšè±å¯ãªããã°ã©ããŒãæœè±¡çã§é«éãªã³ãŒããæžãæ¹æ³ãèŠã€ããããšãã§ããŸãã ãããããã®åé¡ã¯äžè¬çã§ãã
幞ããªããšã«ãã»ãšãã©ã®ã³ã³ãã¥ãŒã¿ãŒã¯ãã¡ããã¡ãéãã§ãã ããŒã¿ã»ããã倧ããããªãå ŽåããŸãã¯å®è¡æéã人ã®èгç¹ããèŠãŠååã«é«éã«ããå¿
èŠãããå ŽåïŒããšãã°ããŠãŒã¶ãŒããã¿ã³ãæŒããã³ã«äœããå®è¡ããããïŒ-åäœããçŸãããœãªã¥ãŒã·ã§ã³ãäœæããŠãããŸããŸãã0.5ããªç§ããŸãã¯éåžžã«æé©åãããŠããã1/10ããªç§ã§æ©èœããŸãã
ãã®ã³ãŒããåŒã³åºãããé »åºŠã倧ãŸãã«èšç®ãããšäŸ¿å©ã§ãã ã«ãŒãå
ã«ã«ãŒããããå ŽåïŒçŽæ¥ããŸãã¯å
éšã§ã«ãŒããšãæ©èœãã颿°ã®ã«ãŒãå
ã®åŒã³åºããä»ããŠïŒãã³ãŒãã¯N * Måå®è¡ãããŸããããã§ãNã¯å€åŽã®ã«ãŒãã®ç¹°ãè¿ãæ°ãMã¯å
åŽã®ã«ãŒãã®ç¹°ãè¿ãæ°ã§ãã å
åŽã®ã«ãŒãã«Påç¹°ãè¿ãããå¥ã®ãµã€ã¯ã«ãããå Žåããã§ã«N * M * P-ãååŸããŸãã ããã¯å€§ããªæ°ã«ã€ãªããå¯èœæ§ããããããã°ã©ã ã®é床ãäœäžãããšãå€ãã®å Žåãåé¡ã¯æãå
åŽã®ã«ãŒãå
ã®å°ããªã³ãŒãã«çž®å°ãããŸãã
ã°ã¬ãŒãã°ã¬ãŒãã°ã¬ãŒãã°ã¬ãŒãã°ã¬ãŒã...
ç§ã®ç¥ç¶ããã£ãªããŒãããŒããŒãã±ã¯ãããŒã¿ãã¡ã€ã«ã«èšèŒãããŠããŸãã 圌ããå§ããŠãç§ã®ç¥å
ã§ããæå¹Žé·ã®ããŠãšã«ã»ãã¡ã³ã»ããã«ããã¯ãç§ã®çŽæ¥ã®ç¥å
ãæ¢ããŠå®¶æã远跡ã§ããŸãã ä»ãç§ã¯åœŒããã®DNAã®å²åãèšç®ãããïŒçè«äžïŒã
ç¥å
ã®ååããããã衚ããªããžã§ã¯ãã«ç§»åããã«ã¯ãååãšäººã«äžèŽãããªããžã§ã¯ããäœæããŸãã
var byName = {}; ancestry.forEach(function(person) { byName[person.name] = person; }); console.log(byName["Philibert Haverbeke"]);
ã¿ã¹ã¯ã¯ãåã¬ã³ãŒãã§ç¶èŠªãèŠã€ããŠãããŠãšã«ãŸã§ã®æ©æ°ãèšç®ããã ãã§ã¯ãããŸããã å®¶æã®æŽå²ã§ã¯ãããšãã®éã§ããã€ãã®çµå©ããããŸããïŒäºæžãå°ããªæãªã©ïŒã ãã®ç¹ã§ãããå Žæã®å®¶ç³»å³ã®æã¯ä»ã®å Žæãšã€ãªãã£ãŠããã®ã§ã1/2 GïŒGã¯ããŠãšã«ãšç§ã®éã®äžä»£æ°ïŒãããå€ãã®éºäŒåãååŸããŸãã ãã®åŒã¯ãåäžä»£ãéºäŒåºéã2ã€ã«åå²ãããšããä»®å®ã«åºã¥ããŠããŸãã
ããŒã¿ãå·Šããå³ã«é çªã«çµåããããšã§é
åãåäžã®å€ã«åæžãããå Žåãreduceã䜿çšããŠé¡æšããã®ãåççã§ãã ããã§ãç¹ç°ç¹ãååŸããå¿
èŠããããŸãããéºäŒã®ç·ã«åŸãå¿
èŠããããŸãã ãããŠããããã¯åçŽãªãªã¹ãã§ã¯ãªããããªãŒã圢æããŸãã
ç¹å®ã®äººã®ç¥å
ã®ãããã®å€ãçµã¿åãããŠããã®å€ãèæ
®ããŸãã ããã¯ååž°çã«å®è¡ã§ããŸãã ããçš®ã®äººãå¿
èŠãªå Žåã¯ã䞡芪ã«å¿
èŠãªå€ãèšç®ããå¿
èŠãããããã®ããã«ç¥å
ãªã©ã®èšç®ãå¿
èŠã«ãªããŸãã , , - . , . â , , .
, , reduceAncestors «» .
function reduceAncestors(person, f, defaultValue) { function valueFor(person) { if (person == null) return defaultValue; else return f(person, valueFor(byName[person.mother]), valueFor(byName[person.father])); } return valueFor(person); }
valueFor . . person f, .
, , .
function sharedDNA(person, fromMother, fromFather) { if (person.name == "Pauwels van Haverbeke") return 1; else return (fromMother + fromFather) / 2; } var ph = byName["Philibert Haverbeke"]; console.log(reduceAncestors(ph, sharedDNA, 0) / 4);
, , 100% ( ), 1. .
0.05% 16 . , , . , 3 , - .
reduceAncestors. ( ) ( ) . , , 70 .
function countAncestors(person, test) { function combine(person, fromMother, fromFather) { var thisOneCounts = test(person); return fromMother + fromFather + (thisOneCounts ? 1 : 0); } return reduceAncestors(person, combine, 0); } function longLivingPercentage(person) { var all = countAncestors(person, function(person) { return true; }); var longLiving = countAncestors(person, function(person) { return (person.died - person.born) >= 70; }); return longLiving / all; } console.log(longLivingPercentage(byName["Emile Haverbeke"]));
, . , reduceAncestors â .
bind, , , , .
, . isInSet, , . filter , isInSet, , isInSet .
var theSet = ["Carel Haverbeke", "Maria van Brussel", "Donald Duck"]; function isInSet(set, person) { return set.indexOf(person.name) > -1; } console.log(ancestry.filter(function(person) { return isInSet(theSet, person); }));
bind , isInSet theSet, , bind.
, null, â , apply. .
ãŸãšã
â , JavaScript. « » , , .
â forEach, - , filter â , , map â , , reduce â .
apply, . bind .
reduce concat , .
var arrays = [[1, 2, 3], [4, 5], [6]];
, ( ). average, .
â , , . byName, .
function average(array) { function plus(a, b) { return a + b; } return array.reduce(plus) / array.length; } var byName = {}; ancestry.forEach(function(person) { byName[person.name] = person; });
, 90 . . . , , 100 : Math.ceil(person.died / 100).
function average(array) { function plus(a, b) { return a + b; } return array.reduce(plus) / array.length; }
groupBy, . , , , .
Every some
every some. , , , true false. , && true, true, every true, true . , some true, true . , â , some true , .
every some, , , .