1
1
// Get your shorts on - this is an array workout!
2
2
// ## Array Cardio Day 1
3
+ var __assign = ( this && this . __assign ) || function ( ) {
4
+ __assign = Object . assign || function ( t ) {
5
+ for ( var s , i = 1 , n = arguments . length ; i < n ; i ++ ) {
6
+ s = arguments [ i ] ;
7
+ for ( var p in s ) if ( Object . prototype . hasOwnProperty . call ( s , p ) )
8
+ t [ p ] = s [ p ] ;
9
+ }
10
+ return t ;
11
+ } ;
12
+ return __assign . apply ( this , arguments ) ;
13
+ } ;
3
14
// Some data we can work with
4
15
var inventors = [
5
16
{ first : 'Albert' , last : 'Einstein' , year : 1879 , passed : 1955 } ,
@@ -16,19 +27,78 @@ var inventors = [
16
27
{ first : 'Hanna' , last : 'Hammarström' , year : 1829 , passed : 1909 }
17
28
] ;
18
29
var people = [ 'Beck, Glenn' , 'Becker, Carl' , 'Beckett, Samuel' , 'Beddoes, Mick' , 'Beecher, Henry' , 'Beethoven, Ludwig' , 'Begin, Menachem' , 'Belloc, Hilaire' , 'Bellow, Saul' , 'Benchley, Robert' , 'Benenson, Peter' , 'Ben-Gurion, David' , 'Benjamin, Walter' , 'Benn, Tony' , 'Bennington, Chester' , 'Benson, Leana' , 'Bent, Silas' , 'Bentsen, Lloyd' , 'Berger, Ric' , 'Bergman, Ingmar' , 'Berio, Luciano' , 'Berle, Milton' , 'Berlin, Irving' , 'Berne, Eric' , 'Bernhard, Sandra' , 'Berra, Yogi' , 'Berry, Halle' , 'Berry, Wendell' , 'Bethea, Erin' , 'Bevan, Aneurin' , 'Bevel, Ken' , 'Biden, Joseph' , 'Bierce, Ambrose' , 'Biko, Steve' , 'Billings, Josh' , 'Biondo, Frank' , 'Birrell, Augustine' , 'Black, Elk' , 'Blair, Robert' , 'Blair, Tony' , 'Blake, William' ] ;
30
+ var firstXChars = function ( firstNumber ) { return function ( input ) { return input . toString ( ) . slice ( 0 , firstNumber ) ; } ; } ;
31
+ var test = function ( a , b ) { return ( a === b ) ; } ;
32
+ var firstTwoChars = firstXChars ( 2 ) ;
19
33
// Array.prototype.filter()
20
34
// 1. Filter the list of inventors for those who were born in the 1500's
35
+ var bornIn1500s = function ( person ) { return test ( firstTwoChars ( person . year ) , '15' ) ; } ;
36
+ var inventorsBornIn1500s = inventors . filter ( bornIn1500s ) ;
37
+ console . log ( "inventorsBornIn1500s" ) ;
38
+ console . table ( inventorsBornIn1500s ) ;
21
39
// Array.prototype.map()
22
40
// 2. Give us an array of the inventors' first and last names
41
+ var combineName = function ( person ) { return person . first + " " + person . last ; } ;
42
+ var inventorsNames = inventors . map ( combineName ) ;
43
+ console . log ( { inventorsNames : inventorsNames } ) ;
23
44
// Array.prototype.sort()
24
45
// 3. Sort the inventors by birthdate, oldest to youngest
46
+ /**
47
+ * Sort function builder
48
+ * @param callback
49
+ */
50
+ var sortCallback = function ( callback ) {
51
+ return function ( compareType ) {
52
+ return function ( a , b ) { return compareType ( callback ( a ) , callback ( b ) ) ; } ;
53
+ } ;
54
+ } ; // Last, perform the actual comparison
55
+ var sortNumberAsc = function ( a , b ) { return a - b ; } ;
56
+ var sortKey = function ( key ) { return sortCallback ( function ( value ) { return value [ key ] ; } ) ; } ;
57
+ var sortYearsAsc = sortKey ( 'year' ) ( sortNumberAsc ) ;
58
+ var inventorsSortedByBirthdate = inventors . sort ( sortYearsAsc ) ;
59
+ console . log ( "inventorsSortedByBirthdate" ) ;
60
+ console . table ( inventorsSortedByBirthdate ) ;
25
61
// Array.prototype.reduce()
26
62
// 4. How many years did all the inventors live?
63
+ var personLifespan = function ( person ) { return person . passed - person . year ; } ;
64
+ var personArrayReducer = function ( acc , currVal ) { return acc + personLifespan ( currVal ) ; } ;
65
+ var totalInventorLifespan = inventors . reduce ( personArrayReducer , 0 ) ;
66
+ console . log ( { totalInventorLifespan : totalInventorLifespan } ) ;
27
67
// 5. Sort the inventors by years lived
68
+ var appendLifespan = function ( person ) { return ( __assign ( { lifespan : personLifespan ( person ) } , person ) ) ; } ;
69
+ var sortByLifespan = sortCallback ( personLifespan ) ( sortNumberAsc ) ;
70
+ var inventorsSortedByYearsLived = inventors
71
+ // .map(appendLifespan)
72
+ . sort ( sortByLifespan ) ;
73
+ console . log ( "inventorsSortedByYearsLived" ) ;
74
+ console . table ( inventorsSortedByYearsLived ) ;
28
75
// 6. create a list of Boulevards in Paris that contain 'de' anywhere in the name
29
76
// https://en.wikipedia.org/wiki/Category:Boulevards_in_Paris
77
+ var $ = function ( selector ) { return [ ] . slice . call ( document . querySelectorAll ( selector ) ) ; } ;
78
+ var containsText = function ( text ) { return function ( element ) { return element . innerText . indexOf ( text ) > - 1 ; } ; } ;
79
+ var containsDe = containsText ( 'de' ) ;
80
+ var boulevardsWithDe = $ ( '.mw-category-group a' ) . filter ( containsDe ) ;
81
+ console . log ( boulevardsWithDe ) ;
30
82
// 7. sort Exercise
31
83
// Sort the people alphabetically by last name
84
+ var sortAlphaAsc = function ( a , b ) { return a > b ? 1 : a < b ? - 1 : 0 ; } ;
85
+ var sortByFirstElement = sortCallback ( function ( array ) { return array [ 0 ] ; } ) ;
86
+ var sortByFirstElementAlpha = sortByFirstElement ( sortAlphaAsc ) ;
87
+ var splitOnComma = function ( string ) { return string . split ( ',' ) ; } ;
88
+ var joinWithComma = function ( array ) { return array . join ( ', ' ) ; } ;
89
+ var peopleByLastName = people
90
+ . map ( splitOnComma )
91
+ . sort ( sortByFirstElementAlpha )
92
+ . map ( joinWithComma ) ;
93
+ console . table ( peopleByLastName ) ;
32
94
// 8. Reduce Exercise
33
95
// Sum up the instances of each of these
34
96
var data = [ 'car' , 'car' , 'truck' , 'truck' , 'bike' , 'walk' , 'car' , 'van' , 'bike' , 'walk' , 'car' , 'van' , 'car' , 'truck' ] ;
97
+ var dataCount = data . reduce ( function ( acc , currVal ) {
98
+ if ( ! acc [ currVal ] ) {
99
+ acc [ currVal ] = 1 ;
100
+ }
101
+ acc [ currVal ] = acc [ currVal ] + 1 ;
102
+ return acc ;
103
+ } , { } ) ;
104
+ console . table ( dataCount ) ;
0 commit comments