};
}
ΠΡΠ»ΠΈ f ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π±ΠΎΠ»ΡΡΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°, ΠΎΠ½Π° ΠΏΠΎΠ»ΡΡΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠ΅ΡΠ²ΡΠΉ. ΠΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΊΡΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΊ Π²Π½ΡΡΡΠ΅Π½Π½Π΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ (arg1, arg2 ΠΈ Ρ. Π΄.) ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π²ΡΠ΅ ΠΈΡ Π² f, Π½ΠΎ Π²Π΅Π΄Ρ Π½Π΅ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ, ΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° Π½Π°ΠΌ Ρ Π²Π°ΡΠΈΡ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΡΡΠ½ΠΊΡΠΈΡ f Π½Π΅ ΠΌΠΎΠ³Π»Π° Π±Ρ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ arguments.length. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ Π²ΡΡ Π²ΡΠ΅ΠΌΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π»ΠΈ Π±Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ², Π±ΡΠ»ΠΎ Π±Ρ Π½Π΅ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ, ΡΠΊΠΎΠ»ΡΠΊΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π½Π°ΠΌ Π±ΡΠ»ΠΎ Π·Π°Π΄Π°Π½ΠΎ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ.
ΠΠ»Ρ ΡΠ°ΠΊΠΈΡ ΡΠ»ΡΡΠ°Π΅Π² Ρ ΡΡΠ½ΠΊΡΠΈΠΉ Π² JavaScript Π΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ apply. ΠΠΌΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΌΠ°ΡΡΠΈΠ² (ΠΈΠ»ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡ Π² Π²ΠΈΠ΄Π΅ ΠΌΠ°ΡΡΠΈΠ²Π°) ΠΈΠ· Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ², Π° ΠΎΠ½ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ Ρ ΡΡΠΈΠΌΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ.
function transparentWrapping(f) {
return function() {
return f.apply(null, arguments);
};
}
ΠΠ°Π½Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ Π±Π΅ΡΠΏΠΎΠ»Π΅Π·Π½Π°, Π½ΠΎ ΠΎΠ½Π° Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΡΡΠΈΠΉ Π½Π°Ρ ΡΠ°Π±Π»ΠΎΠ½ β Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠ°Ρ Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π² f Π²ΡΠ΅ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠ΅ Π΅Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ, Π½ΠΎ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ ΡΠΎΠ³ΠΎ. ΠΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΡΡΠΎ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π΅Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ², Ρ ΡΠ°Π½ΡΡΠΈΡ ΡΡ Π² ΠΎΠ±ΡΠ΅ΠΊΡΠ΅ arguments, Π² ΠΌΠ΅ΡΠΎΠ΄ apply. ΠΠ΅ΡΠ²ΡΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΠΌΠ΅ΡΠΎΠ΄Π° apply, ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΌΡ Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΠΌ null, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΠΌΡΠ»ΡΡΠΈΠΈ Π²ΡΠ·ΠΎΠ²Π° ΠΌΠ΅ΡΠΎΠ΄Π°. ΠΡ Π²Π΅ΡΠ½ΡΠΌΡΡ ΠΊ ΡΡΠΎΠΌΡ Π²ΠΎΠΏΡΠΎΡΡ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ Π³Π»Π°Π²Π΅.
JSON
Π€ΡΠ½ΠΊΡΠΈΠΈ Π²ΡΡΡΠ΅Π³ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠ°, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΊΠ°ΠΊΠΈΠΌ-ΡΠΎ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌ ΠΌΠ°ΡΡΠΈΠ²Π°, ΡΠΈΡΠΎΠΊΠΎ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Ρ Π² JavaScript. ΠΠ΅ΡΠΎΠ΄ forEach β ΠΎΠ΄Π½Π° ΠΈΠ· ΡΠ°ΠΌΡΡ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΡΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² Π½Π°ΠΌ Π΄ΠΎΡΡΡΠΏΠ½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΡΡΠ³ΠΈΡ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΉ. ΠΠ»Ρ Π·Π½Π°ΠΊΠΎΠΌΡΡΠ²Π° Ρ Π½ΠΈΠΌΠΈ Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΠΈΠ³ΡΠ°Π΅ΠΌ Ρ Π΅ΡΡ ΠΎΠ΄Π½ΠΈΠΌ Π½Π°Π±ΠΎΡΠΎΠΌ Π΄Π°Π½Π½ΡΡ .
ΠΠ΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π»Π΅Ρ Π½Π°Π·Π°Π΄ ΠΊΡΠΎ-ΡΠΎ ΠΎΠ±ΡΠ»Π΅Π΄ΠΎΠ²Π°Π» ΠΌΠ½ΠΎΠ³ΠΎ Π°ΡΡ ΠΈΠ²ΠΎΠ² ΠΈ ΡΠ΄Π΅Π»Π°Π» ΡΠ΅Π»ΡΡ ΠΊΠ½ΠΈΠ³Ρ ΠΏΠΎ ΠΈΡΡΠΎΡΠΈΠΈ ΠΌΠΎΠ΅ΠΉ ΡΠ°ΠΌΠΈΠ»ΠΈΠΈ. Π― ΠΎΡΠΊΡΡΠ» Π΅Ρ, Π½Π°Π΄Π΅ΡΡΡ Π½Π°ΠΉΡΠΈ ΡΠ°ΠΌ ΡΡΡΠ°ΡΠ΅ΠΉ, ΠΏΠΈΡΠ°ΡΠΎΠ² ΠΈ Π°Π»Ρ ΠΈΠΌΠΈΠΊΠΎΠ²β¦ ΠΠΎ ΠΎΠΊΠ°Π·Π°Π»ΠΎΡΡ, ΡΡΠΎ ΠΎΠ½Π° Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π° Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΡΠ»Π°ΠΌΠ°Π½Π΄ΡΠΊΠΈΠΌΠΈ ΡΠ΅ΡΠΌΠ΅ΡΠ°ΠΌΠΈ. ΠΠ»Ρ ΡΠ°Π·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ Ρ ΠΈΠ·Π²Π»ΡΠΊ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΏΠΎ ΠΌΠΎΠΈΠΌ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΡΠΌ ΠΏΡΠ΅Π΄ΠΊΠ°ΠΌ ΠΈ ΠΏΠ΅ΡΠ΅Π²ΡΠ» Π² ΡΠΎΡΠΌΠ°Ρ, ΠΏΡΠΈΠ³ΠΎΠ΄Π½ΡΠΉ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠΎΠΌ.
Π€Π°ΠΉΠ» Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊ:
[
{"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 (ΡΠ°Π·ΠΌΠ΅ΡΠΊΠ° ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² JavaScript). ΠΠ½ ΡΠΈΡΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² Ρ ΡΠ°Π½Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½ΡΡ ΠΈ ΡΠ΅ΡΠ΅Π²ΡΡ ΠΊΠΎΠΌΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΡΡ .
JSON ΠΏΠΎΡ ΠΎΠΆ Π½Π° JavaScript ΠΏΠΎ ΡΠΏΠΎΡΠΎΠ±Ρ Π·Π°ΠΏΠΈΡΠΈ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² β Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡΠΌΠΈ. ΠΡΠ΅ ΠΈΠΌΠ΅Π½Π° ΡΠ²ΠΎΠΉΡΡΠ² Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ Π·Π°ΠΊΠ»ΡΡΠ΅Π½Ρ Π² Π΄Π²ΠΎΠΉΠ½ΡΠ΅ ΠΊΠ°Π²ΡΡΠΊΠΈ, Π° ΡΠ°ΠΊΠΆΠ΅ Π΄ΠΎΠΏΡΡΠΊΠ°ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΡΡΡΠ΅ Π²Π΅Π»ΠΈΡΠΈΠ½Ρ β Π½ΠΈΠΊΠ°ΠΊΠΈΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ , Π½ΠΈΡΠ΅Π³ΠΎ ΡΡΠΎ Π²ΠΊΠ»ΡΡΠ°Π»ΠΎ Π±Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ. Π’Π°ΠΊΠΆΠ΅ Π½Π΅ Π΄ΠΎΠΏΡΡΠΊΠ°ΡΡΡΡ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ.
JavaScript ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΠΈ JSON.stringify ΠΈ JSON.parse, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²ΡΠ²Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· ΡΡΠΎΠ³ΠΎ ΡΠΎΡΠΌΠ°ΡΠ° ΠΈ Π² ΡΡΠΎΡ ΡΠΎΡΠΌΠ°Ρ. ΠΠ΅ΡΠ²Π°Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΡΡΠΎΡΠΊΡ Ρ JSON. ΠΡΠΎΡΠ°Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠ°ΠΊΡΡ ΡΡΡΠΎΡΠΊΡ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅.
var string = JSON.stringify({name: "X", born: 1980});
console.log(string);
// β {"name":"X","born":1980}
console.log(JSON.parse(string).born);
// β 1980
ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ANCESTRY_FILE, Π΄ΠΎΡΡΡΠΏΠ½Π°Ρ Π·Π΄Π΅ΡΡ, ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ JSON ΡΠ°ΠΉΠ» Π² Π²ΠΈΠ΄Π΅ ΡΡΡΠΎΠΊΠΈ. ΠΠ°Π²Π°ΠΉΡΠ΅ Π΅Ρ ΡΠ°ΡΠΊΠΎΠ΄ΠΈΡΡΠ΅ΠΌ ΠΈ ΠΏΠΎΡΡΠΈΡΠ°Π΅ΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΏΠΎΠΌΡΠ½ΡΡΡΡ Π»ΡΠ΄Π΅ΠΉ.
var ancestry = JSON.parse(ANCESTRY_FILE);
console.log(ancestry.length);
// β 39
Π€ΠΈΠ»ΡΡΡΡΠ΅ΠΌ ΠΌΠ°ΡΡΠΈΠ²
Π§ΡΠΎΠ±Ρ Π½Π°ΠΉΡΠΈ Π»ΡΠ΄Π΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ»ΠΈ ΠΌΠΎΠ»ΠΎΠ΄Ρ Π² 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;
}));
// β [{name: "Philibert Haverbeke", β¦}, β¦]
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ test β ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ. ΠΠ½Π° Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°, Π° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ, ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ Π»ΠΈ ΡΡΠΎΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π² Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠΉ ΠΌΠ°ΡΡΠΈΠ².
Π ΡΠ°ΠΉΠ»Π΅ ΠΎΠΊΠ°Π·Π°Π»ΠΎΡΡ ΡΡΠΈ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΠ°, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ»ΠΈ ΠΌΠΎΠ»ΠΎΠ΄Ρ Π² 1924 β Π΄Π΅Π΄ΡΡΠΊΠ°, Π±Π°Π±ΡΡΠΊΠ° ΠΈ Π΄Π²ΠΎΡΡΠΎΠ΄Π½Π°Ρ Π±Π°Π±ΡΡΠΊΠ°.
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠ½ΠΊΡΠΈΡ filter Π½Π΅ ΡΠ΄Π°Π»ΡΠ΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΈΠ· ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π°, Π° ΡΡΡΠΎΠΈΡ Π½ΠΎΠ²ΡΠΉ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΡΠ΅Π΄ΡΠΈΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ. ΠΡΠΎ ΡΠΈΡΡΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ½Π° Π½Π΅ ΠΏΠΎΡΡΠΈΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠΉ Π΅ΠΉ ΠΌΠ°ΡΡΠΈΠ².
ΠΠ°ΠΊ ΠΈ forEach, filter β ΡΡΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΌΠ°ΡΡΠΈΠ²Π°. Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΌΡ ΠΎΠΏΠΈΡΠ°Π»ΠΈ ΡΠ°ΠΊΡΡ ΡΡΠ½ΠΊΡΠΈΡ, ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎΠ±Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ ΠΎΠ½Π° Π΄Π΅Π»Π°Π΅Ρ Π²Π½ΡΡΡΠΈ. ΠΡΠ½ΡΠ½Π΅ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅Ρ ΠΏΡΠΎΡΡΠΎ:
console.log(ancestry.filter(function(person) {
return person.father == "Carel Haverbeke";
}));
// β [{name: "Carolus Haverbeke", β¦}]
ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ map
ΠΠΎΠΏΡΡΡΠΈΠΌ, Π΅ΡΡΡ Ρ Π½Π°Ρ ΠΌΠ°ΡΡΠΈΠ² ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠΈΡ Π»ΡΠ΄Π΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ» ΠΏΠΎΠ»ΡΡΠ΅Π½ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΠ΅ΠΉ ΠΌΠ°ΡΡΠΈΠ²Π° ΠΏΡΠ΅Π΄ΠΊΠΎΠ². ΠΠΎ Π½Π°ΠΌ Π½ΡΠΆΠ΅Π½ ΠΌΠ°ΡΡΠΈΠ² ΠΈΠΌΡΠ½, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ»ΠΎ Π±Ρ ΠΏΡΠΎΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΡ.
ΠΠ΅ΡΠΎΠ΄ 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;
}));
// β ["Clara Aernoudts", "Emile Haverbeke",
// "Maria Haverbeke"]
Π§ΡΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ, Π»ΡΠ΄ΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΎΠΆΠΈΠ»ΠΈ Ρ ΠΎΡΡ Π±Ρ Π΄ΠΎ 90 Π»Π΅Ρ β ΡΡΠΎ ΡΠ΅ ΡΠ°ΠΌΡΠ΅, ΡΡΠΎ ΠΌΡ Π²ΠΈΠ΄Π΅Π»ΠΈ ΡΠ°Π½Π΅Π΅, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ»ΠΈ ΠΌΠΎΠ»ΠΎΠ΄Ρ Π² 1920-Ρ Π³ΠΎΠ΄Π°Ρ . ΠΡΠΎ ΠΊΠ°ΠΊ ΡΠ°Π· ΡΠ°ΠΌΠΎΠ΅ Π½ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠΊΠΎΠ»Π΅Π½ΠΈΠ΅ Π² ΠΌΠΎΠΈΡ Π·Π°ΠΏΠΈΡΡΡ . ΠΠΈΠ΄ΠΈΠΌΠΎ, ΠΌΠ΅Π΄ΠΈΡΠΈΠ½Π° ΡΠ΅ΡΡΡΠ·Π½ΠΎ ΡΠ»ΡΡΡΠΈΠ»Π°ΡΡ.
ΠΠ°ΠΊ ΠΈ forEach ΠΈ filter, map ΡΠ°ΠΊΠΆΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΌ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ Ρ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ².
Π‘ΡΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ reduce
ΠΡΡΠ³ΠΎΠΉ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΌΠ°ΡΡΠΈΠ²Π°ΠΌΠΈ β ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΎΠ΄ΠΈΠ½ΠΎΡΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π΄Π°Π½Π½ΡΡ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅. ΠΠ΄ΠΈΠ½ ΠΏΡΠΈΠΌΠ΅Ρ β ΡΠΆΠ΅ Π·Π½Π°ΠΊΠΎΠΌΠΎΠ΅ Π½Π°ΠΌ ΡΡΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΏΠΈΡΠΊΠ° Π½ΠΎΠΌΠ΅ΡΠΎΠ². ΠΡΡΠ³ΠΎΠΉ β ΠΏΠΎΠΈΡΠΊ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΠ°, ΡΠΎΠ΄ΠΈΠ²ΡΠ΅Π³ΠΎΡΡ ΡΠ°Π½ΡΡΠ΅ Π²ΡΠ΅Ρ .
ΠΠΏΠ΅ΡΠ°ΡΠΈΡ Π²ΡΡΡΠ΅Π³ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠ° ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠΈΠΏΠ° Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ reduce (ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΠ΅; ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠ³Π΄Π° fold, ΡΠ²ΡΡΡΡΠ²Π°Π½ΠΈΠ΅). ΠΠΎΠΆΠ½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ Π΅Ρ Π² Π²ΠΈΠ΄Π΅ ΡΠΊΠ»Π°Π΄ΡΠ²Π°Π½ΠΈΡ ΠΌΠ°ΡΡΠΈΠ²Π°, ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π·Π° ΡΠ°Π·. ΠΡΠΈ ΡΡΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΡΠΈΡΠ΅Π» ΠΌΡ Π½Π°ΡΠΈΠ½Π°Π»ΠΈ Ρ Π½ΡΠ»Ρ, ΠΈ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠΎΠ²Π°Π»ΠΈ Π΅Π³ΠΎ Ρ ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΡΡΠΌΠΌΠΎΠΉ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ reduce, ΠΊΡΠΎΠΌΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π° β ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΡΡΡΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΈ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΡΡΡΡ ΠΌΠ΅Π½Π΅Π΅ ΠΏΠΎΠ½ΡΡΠ½Π°Ρ, ΡΠ΅ΠΌ filter ΠΈΠ»ΠΈ map, ΠΏΠΎΡΡΠΎΠΌΡ ΠΎΠ±ΡΠ°ΡΠΈΡΠ΅ Π½Π° Π½Π΅Ρ ΠΏΡΠΈΡΡΠ°Π»ΡΠ½ΠΎΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅.
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));
// β 10
Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² reduce, ΠΊΠΎΡΠΎΡΡΠΉ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠ°ΠΊ ΠΆΠ΅, Π΅ΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΠ΄ΠΎΠ±Π΅Π½. ΠΡΠ»ΠΈ ΠΌΠ°ΡΡΠΈΠ² ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Ρ ΠΎΡΡ Π±Ρ ΠΎΠ΄ΠΈΠ½ ΡΠ»Π΅ΠΌΠ΅Π½Ρ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π΅ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ start. ΠΠ΅ΡΠΎΠ΄ Π²ΠΎΠ·ΡΠΌΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΡΠ°ΡΡΠΎΠ²ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΌΠ°ΡΡΠΈΠ²Π° ΠΈ Π½Π°ΡΠ½ΡΡ ΡΠ°Π±ΠΎΡΡ ΡΠΎ Π²ΡΠΎΡΠΎΠ³ΠΎ.
Π§ΡΠΎΠ±Ρ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ reduce Π½Π°ΠΉΡΠΈ ΡΠ°ΠΌΠΎΠ³ΠΎ Π΄ΡΠ΅Π²Π½Π΅Π³ΠΎ ΠΈΠ· ΠΈΠ·Π²Π΅ΡΡΠ½ΡΡ ΠΌΠΎΠΈΡ ΠΏΡΠ΅Π΄ΠΊΠΎΠ², ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΠΏΠΈΡΠ°ΡΡ Π½Π΅ΡΡΠΎ Π²ΡΠΎΠ΄Π΅:
console.log(ancestry.reduce(function(min, cur) {
if (cur.born < min.born) return cur;
else return min;
}));
// β {name: "Pauwels van Haverbeke", born: 1535, β¦}
ΠΠΎΠΌΠΏΠΎΠ½ΡΠ΅ΠΌΠΎΡΡΡ
ΠΠ°ΠΊ Π±Ρ ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ (ΠΏΠΎΠΈΡΠΊ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΠ° Ρ ΡΠ°ΠΌΠΎΠΉ ΡΠ°Π½Π½Π΅ΠΉ Π΄Π°ΡΠΎΠΉ ΡΠΎΠΆΠ΄Π΅Π½ΠΈΡ) Π±Π΅Π· ΡΡΠ½ΠΊΡΠΈΠΉ Π²ΡΡΡΠ΅Π³ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠ°? ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅, ΠΊΠΎΠ΄ Π½Π΅ ΡΠ°ΠΊΠΎΠΉ ΡΠΆ ΠΈ ΡΠΆΠ°ΡΠ½ΡΠΉ:
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);
// β {name: "Pauwels van Haverbeke", born: 1535, β¦}
Π§ΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ , Π½Π° Π΄Π²Π΅ ΡΡΡΠΎΡΠΊΠΈ Π΄Π»ΠΈΠ½Π½Π΅Π΅ β Π½ΠΎ ΠΏΠΎΠΊΠ° Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΠΎΠ½ΡΡΠ½ΡΠΉ ΠΊΠΎΠ΄.
Π€ΡΠ½ΠΊΡΠΈΠΈ Π²ΡΡΡΠ΅Π³ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠ° ΡΠ°ΡΠΊΡΡΠ²Π°ΡΡ ΡΠ²ΠΎΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΠΎ-Π½Π°ΡΡΠΎΡΡΠ΅ΠΌΡ, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ. Π ΠΏΡΠΈΠΌΠ΅ΡΡ, Π½Π°ΠΏΠΈΡΠ΅ΠΌ ΠΊΠΎΠ΄, Π½Π°Ρ ΠΎΠ΄ΡΡΠΈΠΉ ΡΡΠ΅Π΄Π½ΠΈΠΉ Π²ΠΎΠ·ΡΠ°ΡΡ ΠΌΡΠΆΡΠΈΠ½ ΠΈ ΠΆΠ΅Π½ΡΠΈΠ½ Π² Π½Π°Π±ΠΎΡΠ΅.
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)));