Last active
June 12, 2016 20:23
-
-
Save abhisekp/b858483f770f304945c1757c61c75cd2 to your computer and use it in GitHub Desktop.
Functional Programming - LearnRx http://reactivex.io/learnrx/
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function(console) { | |
var names = ["Ben", "Jafar", "Matt", "Priya", "Brian"], | |
counter; | |
for(counter = 0; counter < names.length; counter++) { | |
console.log(names[counter]); | |
} | |
} | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function(console) { | |
var names = ["Ben", "Jafar", "Matt", "Priya", "Brian"]; | |
names.forEach(function(name) { | |
console.log(name); | |
}); | |
} | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function() { | |
var newReleases = [ | |
{ | |
"id": 70111470, | |
"title": "Die Hard", | |
"boxart": "http://cdn-0.nflximg.com/images/2891/DieHard.jpg", | |
"uri": "http://api.netflix.com/catalog/titles/movies/70111470", | |
"rating": [4.0], | |
"bookmark": [] | |
}, | |
{ | |
"id": 654356453, | |
"title": "Bad Boys", | |
"boxart": "http://cdn-0.nflximg.com/images/2891/BadBoys.jpg", | |
"uri": "http://api.netflix.com/catalog/titles/movies/70111470", | |
"rating": [5.0], | |
"bookmark": [{ id:432534, time:65876586 }] | |
}, | |
{ | |
"id": 65432445, | |
"title": "The Chamber", | |
"boxart": "http://cdn-0.nflximg.com/images/2891/TheChamber.jpg", | |
"uri": "http://api.netflix.com/catalog/titles/movies/70111470", | |
"rating": [4.0], | |
"bookmark": [] | |
}, | |
{ | |
"id": 675465, | |
"title": "Fracture", | |
"boxart": "http://cdn-0.nflximg.com/images/2891/Fracture.jpg", | |
"uri": "http://api.netflix.com/catalog/titles/movies/70111470", | |
"rating": [5.0], | |
"bookmark": [{ id:432534, time:65876586 }] | |
} | |
], | |
videoAndTitlePairs = []; | |
// ------------ INSERT CODE HERE! ----------------------------------- | |
// Use forEach function to accumulate {id, title} pairs from each video. | |
// Put the results into the videoAndTitlePairs array using the Array's | |
// push() method. Example: videoAndTitlePairs.push(newItem); | |
// ------------ INSERT CODE HERE! ----------------------------------- | |
newReleases.forEach(release => videoAndTitlePairs.push({ | |
id: release.id, | |
title: release.title | |
})); | |
return videoAndTitlePairs; | |
} | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Array.prototype.map = function(projectionFunction) { | |
var results = []; | |
this.forEach(function(itemInArray) { | |
// ------------ INSERT CODE HERE! ---------------------------- | |
// Apply the projectionFunction to each item in the array and add | |
// each result to the results array. | |
// Note: you can add items to an array with the push() method. | |
// ------------ INSERT CODE HERE! ---------------------------- | |
results.push(projectionFunction(itemInArray)); | |
}); | |
return results; | |
}; | |
// JSON.stringify([1,2,3].map(function(x) { return x + 1; })) === '[2,3,4]' | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function() { | |
var newReleases = [ | |
{ | |
"id": 70111470, | |
"title": "Die Hard", | |
"boxart": "http://cdn-0.nflximg.com/images/2891/DieHard.jpg", | |
"uri": "http://api.netflix.com/catalog/titles/movies/70111470", | |
"rating": [4.0], | |
"bookmark": [] | |
}, | |
{ | |
"id": 654356453, | |
"title": "Bad Boys", | |
"boxart": "http://cdn-0.nflximg.com/images/2891/BadBoys.jpg", | |
"uri": "http://api.netflix.com/catalog/titles/movies/70111470", | |
"rating": [5.0], | |
"bookmark": [{ id:432534, time:65876586 }] | |
}, | |
{ | |
"id": 65432445, | |
"title": "The Chamber", | |
"boxart": "http://cdn-0.nflximg.com/images/2891/TheChamber.jpg", | |
"uri": "http://api.netflix.com/catalog/titles/movies/70111470", | |
"rating": [4.0], | |
"bookmark": [] | |
}, | |
{ | |
"id": 675465, | |
"title": "Fracture", | |
"boxart": "http://cdn-0.nflximg.com/images/2891/Fracture.jpg", | |
"uri": "http://api.netflix.com/catalog/titles/movies/70111470", | |
"rating": [5.0], | |
"bookmark": [{ id:432534, time:65876586 }] | |
} | |
]; | |
// ------------ INSERT CODE HERE! ----------------------------------- | |
// Use map function to accumulate {id, title} pairs from each video. | |
return newReleases | |
.map(rel => ({id: rel.id, title: rel.title})) | |
// finish this expression! | |
// ------------ INSERT CODE HERE! ----------------------------------- | |
} | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function() { | |
var newReleases = [ | |
{ | |
"id": 70111470, | |
"title": "Die Hard", | |
"boxart": "http://cdn-0.nflximg.com/images/2891/DieHard.jpg", | |
"uri": "http://api.netflix.com/catalog/titles/movies/70111470", | |
"rating": 4.0, | |
"bookmark": [] | |
}, | |
{ | |
"id": 654356453, | |
"title": "Bad Boys", | |
"boxart": "http://cdn-0.nflximg.com/images/2891/BadBoys.jpg", | |
"uri": "http://api.netflix.com/catalog/titles/movies/70111470", | |
"rating": 5.0, | |
"bookmark": [{ id:432534, time:65876586 }] | |
}, | |
{ | |
"id": 65432445, | |
"title": "The Chamber", | |
"boxart": "http://cdn-0.nflximg.com/images/2891/TheChamber.jpg", | |
"uri": "http://api.netflix.com/catalog/titles/movies/70111470", | |
"rating": 4.0, | |
"bookmark": [] | |
}, | |
{ | |
"id": 675465, | |
"title": "Fracture", | |
"boxart": "http://cdn-0.nflximg.com/images/2891/Fracture.jpg", | |
"uri": "http://api.netflix.com/catalog/titles/movies/70111470", | |
"rating": 5.0, | |
"bookmark": [{ id:432534, time:65876586 }] | |
} | |
], | |
videos = []; | |
// ------------ INSERT CODE HERE! ----------------------------------- | |
// Use forEach function to accumulate every video with a rating of 5.0 | |
// ------------ INSERT CODE HERE! ----------------------------------- | |
newReleases.forEach(rel => rel.rating === 5 && videos.push(rel)); | |
return videos; | |
} | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Array.prototype.filter = function(predicateFunction) { | |
var results = []; | |
this.forEach(function(itemInArray) { | |
// ------------ INSERT CODE HERE! ---------------------------- | |
// Apply the predicateFunction to each item in the array. | |
// If the result is truthy, add the item to the results array. | |
// Note: remember you can add items to the array using the array's | |
// push() method. | |
// ------------ INSERT CODE HERE! ---------------------------- | |
predicateFunction(itemInArray) && results.push(itemInArray); | |
}); | |
return results; | |
}; | |
// JSON.stringify([1,2,3].filter(function(x) { return x > 2})) === "[3]" | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function() { | |
var newReleases = [ | |
{ | |
"id": 70111470, | |
"title": "Die Hard", | |
"boxart": "http://cdn-0.nflximg.com/images/2891/DieHard.jpg", | |
"uri": "http://api.netflix.com/catalog/titles/movies/70111470", | |
"rating": 4.0, | |
"bookmark": [] | |
}, | |
{ | |
"id": 654356453, | |
"title": "Bad Boys", | |
"boxart": "http://cdn-0.nflximg.com/images/2891/BadBoys.jpg", | |
"uri": "http://api.netflix.com/catalog/titles/movies/70111470", | |
"rating": 5.0, | |
"bookmark": [{ id:432534, time:65876586 }] | |
}, | |
{ | |
"id": 65432445, | |
"title": "The Chamber", | |
"boxart": "http://cdn-0.nflximg.com/images/2891/TheChamber.jpg", | |
"uri": "http://api.netflix.com/catalog/titles/movies/70111470", | |
"rating": 4.0, | |
"bookmark": [] | |
}, | |
{ | |
"id": 675465, | |
"title": "Fracture", | |
"boxart": "http://cdn-0.nflximg.com/images/2891/Fracture.jpg", | |
"uri": "http://api.netflix.com/catalog/titles/movies/70111470", | |
"rating": 5.0, | |
"bookmark": [{ id:432534, time:65876586 }] | |
} | |
]; | |
// ------------ INSERT CODE HERE! ----------------------------------- | |
// Chain the filter and map functions to select the id of all videos | |
// with a rating of 5.0. | |
return newReleases | |
.filter(rel => rel.rating === 5) | |
.map(rel => rel.id); | |
// Complete this expression | |
// ------------ INSERT CODE HERE! ----------------------------------- | |
} | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function() { | |
var movieLists = [ | |
{ | |
name: "New Releases", | |
videos: [ | |
{ | |
"id": 70111470, | |
"title": "Die Hard", | |
"boxart": "http://cdn-0.nflximg.com/images/2891/DieHard.jpg", | |
"uri": "http://api.netflix.com/catalog/titles/movies/70111470", | |
"rating": 4.0, | |
"bookmark": [] | |
}, | |
{ | |
"id": 654356453, | |
"title": "Bad Boys", | |
"boxart": "http://cdn-0.nflximg.com/images/2891/BadBoys.jpg", | |
"uri": "http://api.netflix.com/catalog/titles/movies/70111470", | |
"rating": 5.0, | |
"bookmark": [{ id:432534, time:65876586 }] | |
} | |
] | |
}, | |
{ | |
name: "Dramas", | |
videos: [ | |
{ | |
"id": 65432445, | |
"title": "The Chamber", | |
"boxart": "http://cdn-0.nflximg.com/images/2891/TheChamber.jpg", | |
"uri": "http://api.netflix.com/catalog/titles/movies/70111470", | |
"rating": 4.0, | |
"bookmark": [] | |
}, | |
{ | |
"id": 675465, | |
"title": "Fracture", | |
"boxart": "http://cdn-0.nflximg.com/images/2891/Fracture.jpg", | |
"uri": "http://api.netflix.com/catalog/titles/movies/70111470", | |
"rating": 5.0, | |
"bookmark": [{ id:432534, time:65876586 }] | |
} | |
] | |
} | |
], | |
allVideoIdsInMovieLists = []; | |
// ------------ INSERT CODE HERE! ----------------------------------- | |
// Use two nested forEach loops to flatten the movieLists into a list of | |
// video ids. | |
// ------------ INSERT CODE HERE! ----------------------------------- | |
movieLists.forEach( | |
cat => cat.videos | |
.forEach( | |
video => allVideoIdsInMovieLists.push(video.id) | |
) | |
); | |
return allVideoIdsInMovieLists; | |
} | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Array.prototype.concatAll = function() { | |
var results = []; | |
this.forEach(function(subArray) { | |
// ------------ INSERT CODE HERE! ---------------------------- | |
// Add all the items in each subArray to the results array. | |
// ------------ INSERT CODE HERE! ---------------------------- | |
subArray.forEach(item => results.push(item)); | |
}); | |
return results; | |
}; | |
// JSON.stringify([ [1,2,3], [4,5,6], [7,8,9] ].concatAll()) === "[1,2,3,4,5,6,7,8,9]" | |
// [1,2,3].concatAll(); // throws an error because this is a one-dimensional array | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function() { | |
var movieLists = [ | |
{ | |
name: "New Releases", | |
videos: [ | |
{ | |
"id": 70111470, | |
"title": "Die Hard", | |
"boxart": "http://cdn-0.nflximg.com/images/2891/DieHard.jpg", | |
"uri": "http://api.netflix.com/catalog/titles/movies/70111470", | |
"rating": 4.0, | |
"bookmark": [] | |
}, | |
{ | |
"id": 654356453, | |
"title": "Bad Boys", | |
"boxart": "http://cdn-0.nflximg.com/images/2891/BadBoys.jpg", | |
"uri": "http://api.netflix.com/catalog/titles/movies/70111470", | |
"rating": 5.0, | |
"bookmark": [{ id:432534, time:65876586 }] | |
} | |
] | |
}, | |
{ | |
name: "Dramas", | |
videos: [ | |
{ | |
"id": 65432445, | |
"title": "The Chamber", | |
"boxart": "http://cdn-0.nflximg.com/images/2891/TheChamber.jpg", | |
"uri": "http://api.netflix.com/catalog/titles/movies/70111470", | |
"rating": 4.0, | |
"bookmark": [] | |
}, | |
{ | |
"id": 675465, | |
"title": "Fracture", | |
"boxart": "http://cdn-0.nflximg.com/images/2891/Fracture.jpg", | |
"uri": "http://api.netflix.com/catalog/titles/movies/70111470", | |
"rating": 5.0, | |
"bookmark": [{ id:432534, time:65876586 }] | |
} | |
] | |
} | |
]; | |
// ------------ INSERT CODE HERE! ----------------------------------- | |
// Use map and concatAll to flatten the movieLists in a list of video ids. | |
// ------------ INSERT CODE HERE! ----------------------------------- | |
return movieLists | |
.map( | |
cat => cat.videos | |
.map(video => video.id) | |
) | |
.concatAll(); | |
// Complete this expression! | |
} | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function() { | |
var movieLists = [ | |
{ | |
name: "Instant Queue", | |
videos : [ | |
{ | |
"id": 70111470, | |
"title": "Die Hard", | |
"boxarts": [ | |
{ width: 150, height:200, url:"http://cdn-0.nflximg.com/images/2891/DieHard150.jpg" }, | |
{ width: 200, height:200, url:"http://cdn-0.nflximg.com/images/2891/DieHard200.jpg" } | |
], | |
"url": "http://api.netflix.com/catalog/titles/movies/70111470", | |
"rating": 4.0, | |
"bookmark": [] | |
}, | |
{ | |
"id": 654356453, | |
"title": "Bad Boys", | |
"boxarts": [ | |
{ width: 200, height:200, url:"http://cdn-0.nflximg.com/images/2891/BadBoys200.jpg" }, | |
{ width: 150, height:200, url:"http://cdn-0.nflximg.com/images/2891/BadBoys150.jpg" } | |
], | |
"url": "http://api.netflix.com/catalog/titles/movies/70111470", | |
"rating": 5.0, | |
"bookmark": [{ id:432534, time:65876586 }] | |
} | |
] | |
}, | |
{ | |
name: "New Releases", | |
videos: [ | |
{ | |
"id": 65432445, | |
"title": "The Chamber", | |
"boxarts": [ | |
{ width: 150, height:200, url:"http://cdn-0.nflximg.com/images/2891/TheChamber150.jpg" }, | |
{ width: 200, height:200, url:"http://cdn-0.nflximg.com/images/2891/TheChamber200.jpg" } | |
], | |
"url": "http://api.netflix.com/catalog/titles/movies/70111470", | |
"rating": 4.0, | |
"bookmark": [] | |
}, | |
{ | |
"id": 675465, | |
"title": "Fracture", | |
"boxarts": [ | |
{ width: 200, height:200, url:"http://cdn-0.nflximg.com/images/2891/Fracture200.jpg" }, | |
{ width: 150, height:200, url:"http://cdn-0.nflximg.com/images/2891/Fracture150.jpg" }, | |
{ width: 300, height:200, url:"http://cdn-0.nflximg.com/images/2891/Fracture300.jpg" } | |
], | |
"url": "http://api.netflix.com/catalog/titles/movies/70111470", | |
"rating": 5.0, | |
"bookmark": [{ id:432534, time:65876586 }] | |
} | |
] | |
} | |
]; | |
// Use one or more map, concatAll, and filter calls to create an array with the following items | |
// [ | |
// {"id": 675465,"title": "Fracture","boxart":"http://cdn-0.nflximg.com/images/2891/Fracture150.jpg" }, | |
// {"id": 65432445,"title": "The Chamber","boxart":"http://cdn-0.nflximg.com/images/2891/TheChamber150.jpg" }, | |
// {"id": 654356453,"title": "Bad Boys","boxart":"http://cdn-0.nflximg.com/images/2891/BadBoys150.jpg" }, | |
// {"id": 70111470,"title": "Die Hard","boxart":"http://cdn-0.nflximg.com/images/2891/DieHard150.jpg" } | |
// ]; | |
return movieLists | |
.map( | |
cat => cat.videos | |
.map( | |
video => video.boxarts.filter(art => (art.width === 150 && art.height === 200)) | |
.map( | |
art => ({ | |
id: video.id, | |
title: video.title, | |
boxart: art.url | |
}) | |
) | |
).concatAll() | |
).concatAll(); | |
// Complete this expression! | |
} | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Array.prototype.concatMap = function(projectionFunctionThatReturnsArray) { | |
return this. | |
map(function(item) { | |
// ------------ INSERT CODE HERE! ---------------------------- | |
// Apply the projection function to each item. The projection | |
// function will return an new child array. This will create a | |
// two-dimensional array. | |
// ------------ INSERT CODE HERE! ---------------------------- | |
return projectionFunctionThatReturnsArray(item); | |
}). | |
// apply the concatAll function to flatten the two-dimensional array | |
concatAll(); | |
}; | |
/* | |
var spanishFrenchEnglishWords = [ ["cero","rien","zero"], ["uno","un","one"], ["dos","deux","two"] ]; | |
// collect all the words for each number, in every language, in a single, flat list | |
var allWords = [0,1,2]. | |
concatMap(function(index) { | |
return spanishFrenchEnglishWords[index]; | |
}); | |
return JSON.stringify(allWords) === '["cero","rien","zero","uno","un","one","dos","deux","two"]'; | |
*/ | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function() { | |
var movieLists = [ | |
{ | |
name: "Instant Queue", | |
videos : [ | |
{ | |
"id": 70111470, | |
"title": "Die Hard", | |
"boxarts": [ | |
{ width: 150, height:200, url:"http://cdn-0.nflximg.com/images/2891/DieHard150.jpg" }, | |
{ width: 200, height:200, url:"http://cdn-0.nflximg.com/images/2891/DieHard200.jpg" } | |
], | |
"url": "http://api.netflix.com/catalog/titles/movies/70111470", | |
"rating": 4.0, | |
"bookmark": [] | |
}, | |
{ | |
"id": 654356453, | |
"title": "Bad Boys", | |
"boxarts": [ | |
{ width: 200, height:200, url:"http://cdn-0.nflximg.com/images/2891/BadBoys200.jpg" }, | |
{ width: 150, height:200, url:"http://cdn-0.nflximg.com/images/2891/BadBoys150.jpg" } | |
], | |
"url": "http://api.netflix.com/catalog/titles/movies/70111470", | |
"rating": 5.0, | |
"bookmark": [{ id:432534, time:65876586 }] | |
} | |
] | |
}, | |
{ | |
name: "New Releases", | |
videos: [ | |
{ | |
"id": 65432445, | |
"title": "The Chamber", | |
"boxarts": [ | |
{ width: 150, height:200, url:"http://cdn-0.nflximg.com/images/2891/TheChamber150.jpg" }, | |
{ width: 200, height:200, url:"http://cdn-0.nflximg.com/images/2891/TheChamber200.jpg" } | |
], | |
"url": "http://api.netflix.com/catalog/titles/movies/70111470", | |
"rating": 4.0, | |
"bookmark": [] | |
}, | |
{ | |
"id": 675465, | |
"title": "Fracture", | |
"boxarts": [ | |
{ width: 200, height:200, url:"http://cdn-0.nflximg.com/images/2891/Fracture200.jpg" }, | |
{ width: 150, height:200, url:"http://cdn-0.nflximg.com/images/2891/Fracture150.jpg" }, | |
{ width: 300, height:200, url:"http://cdn-0.nflximg.com/images/2891/Fracture300.jpg" } | |
], | |
"url": "http://api.netflix.com/catalog/titles/movies/70111470", | |
"rating": 5.0, | |
"bookmark": [{ id:432534, time:65876586 }] | |
} | |
] | |
} | |
]; | |
// Use one or more concatMap, map, and filter calls to create an array with the following items | |
// [ | |
// {"id": 675465,"title": "Fracture","boxart":"http://cdn-0.nflximg.com/images/2891/Fracture150.jpg" }, | |
// {"id": 65432445,"title": "The Chamber","boxart":"http://cdn-0.nflximg.com/images/2891/TheChamber150.jpg" }, | |
// {"id": 654356453,"title": "Bad Boys","boxart":"http://cdn-0.nflximg.com/images/2891/BadBoys150.jpg" }, | |
// {"id": 70111470,"title": "Die Hard","boxart":"http://cdn-0.nflximg.com/images/2891/DieHard150.jpg" } | |
// ]; | |
return movieLists | |
.concatMap(cat => cat.videos | |
.concatMap(video => video.boxarts | |
.filter(art => (art.width === 150 && art.height === 200)) | |
.map( | |
art => ({ | |
id: video.id, | |
title: video.title, | |
boxart: art.url | |
}) | |
) | |
) | |
) | |
// Complete this expression! | |
} | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function() { | |
var boxarts = [ | |
{ width: 200, height:200, url:"http://cdn-0.nflximg.com/images/2891/Fracture200.jpg" }, | |
{ width: 150, height:200, url:"http://cdn-0.nflximg.com/images/2891/Fracture150.jpg" }, | |
{ width: 300, height:200, url:"http://cdn-0.nflximg.com/images/2891/Fracture300.jpg" }, | |
{ width: 425, height:150, url:"http://cdn-0.nflximg.com/images/2891/Fracture425.jpg" } | |
], | |
currentSize, | |
maxSize = -1, | |
largestBoxart; | |
boxarts.forEach(function(boxart) { | |
currentSize = boxart.width * boxart.height; | |
if (currentSize > maxSize) { | |
largestBoxart = boxart; | |
maxSize = currentSize; | |
} | |
}); | |
return largestBoxart; | |
} | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// [1,2,3].reduce(function(accumulatedValue, currentValue) { return accumulatedValue + currentValue; }); === [6]; | |
// [1,2,3].reduce(function(accumulatedValue, currentValue) { return accumulatedValue + currentValue; }, 10); === [16]; | |
Array.prototype.reduce = function(combiner, initialValue) { | |
var counter, | |
accumulatedValue; | |
// If the array is empty, do nothing | |
if (this.length === 0) { | |
return this; | |
} | |
else { | |
// If the user didn't pass an initial value, use the first item. | |
if (arguments.length === 1) { | |
counter = 1; | |
accumulatedValue = this[0]; | |
} | |
else if (arguments.length >= 2) { | |
counter = 0; | |
accumulatedValue = initialValue; | |
} | |
else { | |
throw "Invalid arguments."; | |
} | |
// Loop through the array, feeding the current value and the result of | |
// the previous computation back into the combiner function until | |
// we've exhausted the entire array and are left with only one value. | |
while(counter < this.length) { | |
accumulatedValue = combiner(accumulatedValue, this[counter]) | |
counter++; | |
} | |
return [accumulatedValue]; | |
} | |
}; | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function() { | |
var ratings = [2,3,1,4,5]; | |
// You should return an array containing only the largest rating. Remember that reduce always | |
// returns an array with one item. | |
return ratings. | |
reduce((acc, curr) => acc > curr? acc : curr) // Complete this expression | |
} | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function() { | |
var boxarts = [ | |
{ width: 200, height:200, url:"http://cdn-0.nflximg.com/images/2891/Fracture200.jpg" }, | |
{ width: 150, height:200, url:"http://cdn-0.nflximg.com/images/2891/Fracture150.jpg" }, | |
{ width: 300, height:200, url:"http://cdn-0.nflximg.com/images/2891/Fracture300.jpg" }, | |
{ width: 425, height:150, url:"http://cdn-0.nflximg.com/images/2891/Fracture425.jpg" } | |
]; | |
// You should return an array containing only the URL of the largest box art. Remember that reduce always | |
// returns an array with one item. | |
return boxarts. | |
reduce((acc, curr) => acc.width * acc.height > curr.width * curr.height ? acc : curr) | |
.map(art => art.url); // Complete this expression | |
} | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function() { | |
var videos = [ | |
{ | |
"id": 65432445, | |
"title": "The Chamber" | |
}, | |
{ | |
"id": 675465, | |
"title": "Fracture" | |
}, | |
{ | |
"id": 70111470, | |
"title": "Die Hard" | |
}, | |
{ | |
"id": 654356453, | |
"title": "Bad Boys" | |
} | |
]; | |
// Expecting this output... | |
// [ | |
// { | |
// "65432445": "The Chamber", | |
// "675465": "Fracture", | |
// "70111470": "Die Hard", | |
// "654356453": "Bad Boys" | |
// } | |
// ] | |
return videos. | |
reduce(function(accumulatedMap, video) { | |
var obj = {}; | |
// ----- INSERT CODE TO ADD THE VIDEO TITLE TO THE ---- | |
// ----- NEW MAP USING THE VIDEO ID AS THE KEY ---- | |
obj[video.id] = video.title; | |
// Object.assign() takes all of the enumerable properties from | |
// the object listed in its second argument (obj) and assigns them | |
// to the object listed in its first argument (accumulatedMap). | |
return Object.assign(accumulatedMap, obj); | |
}, | |
// Use an empty map as the initial value instead of the first item in | |
// the list. | |
{}); | |
} | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function() { | |
var movieLists = [ | |
{ | |
name: "New Releases", | |
videos: [ | |
{ | |
"id": 70111470, | |
"title": "Die Hard", | |
"boxarts": [ | |
{ width: 150, height:200, url:"http://cdn-0.nflximg.com/images/2891/DieHard150.jpg" }, | |
{ width: 200, height:200, url:"http://cdn-0.nflximg.com/images/2891/DieHard200.jpg" } | |
], | |
"url": "http://api.netflix.com/catalog/titles/movies/70111470", | |
"rating": 4.0, | |
"bookmark": [] | |
}, | |
{ | |
"id": 654356453, | |
"title": "Bad Boys", | |
"boxarts": [ | |
{ width: 200, height:200, url:"http://cdn-0.nflximg.com/images/2891/BadBoys200.jpg" }, | |
{ width: 140, height:200, url:"http://cdn-0.nflximg.com/images/2891/BadBoys140.jpg" } | |
], | |
"url": "http://api.netflix.com/catalog/titles/movies/70111470", | |
"rating": 5.0, | |
"bookmark": [{ id:432534, time:65876586 }] | |
} | |
] | |
}, | |
{ | |
name: "Thrillers", | |
videos: [ | |
{ | |
"id": 65432445, | |
"title": "The Chamber", | |
"boxarts": [ | |
{ width: 130, height:200, url:"http://cdn-0.nflximg.com/images/2891/TheChamber130.jpg" }, | |
{ width: 200, height:200, url:"http://cdn-0.nflximg.com/images/2891/TheChamber200.jpg" } | |
], | |
"url": "http://api.netflix.com/catalog/titles/movies/70111470", | |
"rating": 4.0, | |
"bookmark": [] | |
}, | |
{ | |
"id": 675465, | |
"title": "Fracture", | |
"boxarts": [ | |
{ width: 200, height:200, url:"http://cdn-0.nflximg.com/images/2891/Fracture200.jpg" }, | |
{ width: 120, height:200, url:"http://cdn-0.nflximg.com/images/2891/Fracture120.jpg" }, | |
{ width: 300, height:200, url:"http://cdn-0.nflximg.com/images/2891/Fracture300.jpg" } | |
], | |
"url": "http://api.netflix.com/catalog/titles/movies/70111470", | |
"rating": 5.0, | |
"bookmark": [{ id:432534, time:65876586 }] | |
} | |
] | |
} | |
]; | |
// Use one or more concatMap, map, and reduce calls to create an array with the following items (order doesn't matter) | |
// [ | |
// {"id": 675465,"title": "Fracture","boxart":"http://cdn-0.nflximg.com/images/2891/Fracture120.jpg" }, | |
// {"id": 65432445,"title": "The Chamber","boxart":"http://cdn-0.nflximg.com/images/2891/TheChamber130.jpg" }, | |
// {"id": 654356453,"title": "Bad Boys","boxart":"http://cdn-0.nflximg.com/images/2891/BadBoys140.jpg" }, | |
// {"id": 70111470,"title": "Die Hard","boxart":"http://cdn-0.nflximg.com/images/2891/DieHard150.jpg" } | |
// ]; | |
var area = function(width, height) { | |
return width * height; | |
}; | |
return movieLists. | |
concatMap(function(movieList) { | |
return movieList.videos. | |
concatMap(function(video) { | |
return video.boxarts. | |
reduce(function(smallest, current) { | |
var smallestSize = area(smallest.width, smallest.height); | |
var currentSize = area(current.width, current.height); | |
return smallestSize < currentSize ? smallest : current; | |
}). | |
map(function(art) { | |
return { | |
id: video.id, | |
title: video.title, | |
boxart: art.url | |
} | |
}) | |
}) | |
}) | |
} | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function() { | |
var videos = [ | |
{ | |
"id": 70111470, | |
"title": "Die Hard", | |
"boxart": "http://cdn-0.nflximg.com/images/2891/DieHard.jpg", | |
"uri": "http://api.netflix.com/catalog/titles/movies/70111470", | |
"rating": 4.0, | |
}, | |
{ | |
"id": 654356453, | |
"title": "Bad Boys", | |
"boxart": "http://cdn-0.nflximg.com/images/2891/BadBoys.jpg", | |
"uri": "http://api.netflix.com/catalog/titles/movies/70111470", | |
"rating": 5.0, | |
}, | |
{ | |
"id": 65432445, | |
"title": "The Chamber", | |
"boxart": "http://cdn-0.nflximg.com/images/2891/TheChamber.jpg", | |
"uri": "http://api.netflix.com/catalog/titles/movies/70111470", | |
"rating": 4.0, | |
}, | |
{ | |
"id": 675465, | |
"title": "Fracture", | |
"boxart": "http://cdn-0.nflximg.com/images/2891/Fracture.jpg", | |
"uri": "http://api.netflix.com/catalog/titles/movies/70111470", | |
"rating": 5.0, | |
} | |
], | |
bookmarks = [ | |
{id: 470, time: 23432}, | |
{id: 453, time: 234324}, | |
{id: 445, time: 987834} | |
], | |
counter, | |
videoIdAndBookmarkIdPairs = []; | |
for(counter = 0; counter < Math.min(videos.length, bookmarks.length); counter++) { | |
// Insert code here to create a {videoId, bookmarkId} pair and add it to the videoIdAndBookmarkIdPairs array. | |
videoIdAndBookmarkIdPairs.push({ | |
videoId: videos[counter].id, | |
bookmarkId: bookmarks[counter].id | |
}) | |
} | |
return videoIdAndBookmarkIdPairs; | |
} | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// JSON.stringify(Array.zip([1,2,3],[4,5,6], function(left, right) { return left + right })) === '[5,7,9]' | |
Array.zip = function(left, right, combinerFunction) { | |
var counter, | |
results = []; | |
for(counter = 0; counter < Math.min(left.length, right.length); counter++) { | |
// Add code here to apply the combinerFunction to the left and right-hand items in the respective arrays | |
results.push(combinerFunction(left[counter], right[counter])); | |
} | |
return results; | |
}; | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function() { | |
var videos = [ | |
{ | |
"id": 70111470, | |
"title": "Die Hard", | |
"boxart": "http://cdn-0.nflximg.com/images/2891/DieHard.jpg", | |
"uri": "http://api.netflix.com/catalog/titles/movies/70111470", | |
"rating": 4.0, | |
}, | |
{ | |
"id": 654356453, | |
"title": "Bad Boys", | |
"boxart": "http://cdn-0.nflximg.com/images/2891/BadBoys.jpg", | |
"uri": "http://api.netflix.com/catalog/titles/movies/70111470", | |
"rating": 5.0, | |
}, | |
{ | |
"id": 65432445, | |
"title": "The Chamber", | |
"boxart": "http://cdn-0.nflximg.com/images/2891/TheChamber.jpg", | |
"uri": "http://api.netflix.com/catalog/titles/movies/70111470", | |
"rating": 4.0, | |
}, | |
{ | |
"id": 675465, | |
"title": "Fracture", | |
"boxart": "http://cdn-0.nflximg.com/images/2891/Fracture.jpg", | |
"uri": "http://api.netflix.com/catalog/titles/movies/70111470", | |
"rating": 5.0, | |
} | |
], | |
bookmarks = [ | |
{id: 470, time: 23432}, | |
{id: 453, time: 234324}, | |
{id: 445, time: 987834} | |
]; | |
return Array. | |
zip(videos, bookmarks, function (video, bookmark) { | |
return { | |
videoId: video.id, | |
bookmarkId: bookmark.id | |
}; | |
}); | |
//... finish this expression | |
} | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function() { | |
var movieLists = [ | |
{ | |
name: "New Releases", | |
videos: [ | |
{ | |
"id": 70111470, | |
"title": "Die Hard", | |
"boxarts": [ | |
{ width: 150, height:200, url:"http://cdn-0.nflximg.com/images/2891/DieHard150.jpg" }, | |
{ width: 200, height:200, url:"http://cdn-0.nflximg.com/images/2891/DieHard200.jpg" } | |
], | |
"url": "http://api.netflix.com/catalog/titles/movies/70111470", | |
"rating": 4.0, | |
"interestingMoments": [ | |
{ type: "End", time:213432 }, | |
{ type: "Start", time: 64534 }, | |
{ type: "Middle", time: 323133} | |
] | |
}, | |
{ | |
"id": 654356453, | |
"title": "Bad Boys", | |
"boxarts": [ | |
{ width: 200, height:200, url:"http://cdn-0.nflximg.com/images/2891/BadBoys200.jpg" }, | |
{ width: 140, height:200, url:"http://cdn-0.nflximg.com/images/2891/BadBoys140.jpg" } | |
], | |
"url": "http://api.netflix.com/catalog/titles/movies/70111470", | |
"rating": 5.0, | |
"interestingMoments": [ | |
{ type: "End", time:54654754 }, | |
{ type: "Start", time: 43524243 }, | |
{ type: "Middle", time: 6575665} | |
] | |
} | |
] | |
}, | |
{ | |
name: "Instant Queue", | |
videos: [ | |
{ | |
"id": 65432445, | |
"title": "The Chamber", | |
"boxarts": [ | |
{ width: 130, height:200, url:"http://cdn-0.nflximg.com/images/2891/TheChamber130.jpg" }, | |
{ width: 200, height:200, url:"http://cdn-0.nflximg.com/images/2891/TheChamber200.jpg" } | |
], | |
"url": "http://api.netflix.com/catalog/titles/movies/70111470", | |
"rating": 4.0, | |
"interestingMoments": [ | |
{ type: "End", time:132423 }, | |
{ type: "Start", time: 54637425 }, | |
{ type: "Middle", time: 3452343} | |
] | |
}, | |
{ | |
"id": 675465, | |
"title": "Fracture", | |
"boxarts": [ | |
{ width: 200, height:200, url:"http://cdn-0.nflximg.com/images/2891/Fracture200.jpg" }, | |
{ width: 120, height:200, url:"http://cdn-0.nflximg.com/images/2891/Fracture120.jpg" }, | |
{ width: 300, height:200, url:"http://cdn-0.nflximg.com/images/2891/Fracture300.jpg" } | |
], | |
"url": "http://api.netflix.com/catalog/titles/movies/70111470", | |
"rating": 5.0, | |
"interestingMoments": [ | |
{ type: "End", time:45632456 }, | |
{ type: "Start", time: 234534 }, | |
{ type: "Middle", time: 3453434} | |
] | |
} | |
] | |
} | |
]; | |
//------------ COMPLETE THIS EXPRESSION -------------- | |
var area = function (width, height) { | |
return width * height; | |
} | |
return movieLists. | |
concatMap(function(movieList) { | |
return movieList.videos. | |
concatMap(function (video) { | |
return Array.zip(video.boxarts. | |
reduce(function (smallArt, currArt) { | |
var smallArtArea = area(smallArt.width, smallArt.height); | |
var currArtArea = area(currArt.width, currArt.height); | |
return smallArtArea < currArtArea ? smallArt : currArt; | |
}), | |
video.interestingMoments. | |
filter(function (moment) { | |
return moment.type === 'Middle'; | |
}), | |
function (art, moment) { | |
return { | |
id: video.id, | |
title: video.title, | |
time: moment.time, | |
url: art.url | |
}; | |
}); | |
}) | |
}); | |
} | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function() { | |
var lists = [ | |
{ | |
"id": 5434364, | |
"name": "New Releases" | |
}, | |
{ | |
"id": 65456475, | |
"name": "Thrillers" | |
} | |
], | |
videos = [ | |
{ | |
"listId": 5434364, | |
"id": 65432445, | |
"title": "The Chamber" | |
}, | |
{ | |
"listId": 5434364, | |
"id": 675465, | |
"title": "Fracture" | |
}, | |
{ | |
"listId": 65456475, | |
"id": 70111470, | |
"title": "Die Hard" | |
}, | |
{ | |
"listId": 65456475, | |
"id": 654356453, | |
"title": "Bad Boys" | |
} | |
]; | |
return lists. | |
map(function (list) { | |
return { | |
name: list.name, | |
videos: videos. | |
filter(function (video) { | |
return video.listId === list.id; | |
}). | |
map(function (video) { | |
return { | |
id: video.id, | |
title: video.title | |
} | |
}) | |
}; | |
}); | |
// complete this expression | |
} | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function () { | |
var lists = [{ | |
"id": 5434364, | |
"name": "New Releases" | |
}, { | |
"id": 65456475, | |
name: "Thrillers" | |
}], | |
videos = [{ | |
"listId": 5434364, | |
"id": 65432445, | |
"title": "The Chamber" | |
}, { | |
"listId": 5434364, | |
"id": 675465, | |
"title": "Fracture" | |
}, { | |
"listId": 65456475, | |
"id": 70111470, | |
"title": "Die Hard" | |
}, { | |
"listId": 65456475, | |
"id": 654356453, | |
"title": "Bad Boys" | |
}], | |
boxarts = [{ | |
videoId: 65432445, | |
width: 130, | |
height: 200, | |
url: "http://cdn-0.nflximg.com/images/2891/TheChamber130.jpg" | |
}, { | |
videoId: 65432445, | |
width: 200, | |
height: 200, | |
url: "http://cdn-0.nflximg.com/images/2891/TheChamber200.jpg" | |
}, { | |
videoId: 675465, | |
width: 200, | |
height: 200, | |
url: "http://cdn-0.nflximg.com/images/2891/Fracture200.jpg" | |
}, { | |
videoId: 675465, | |
width: 120, | |
height: 200, | |
url: "http://cdn-0.nflximg.com/images/2891/Fracture120.jpg" | |
}, { | |
videoId: 675465, | |
width: 300, | |
height: 200, | |
url: "http://cdn-0.nflximg.com/images/2891/Fracture300.jpg" | |
}, { | |
videoId: 70111470, | |
width: 150, | |
height: 200, | |
url: "http://cdn-0.nflximg.com/images/2891/DieHard150.jpg" | |
}, { | |
videoId: 70111470, | |
width: 200, | |
height: 200, | |
url: "http://cdn-0.nflximg.com/images/2891/DieHard200.jpg" | |
}, { | |
videoId: 654356453, | |
width: 200, | |
height: 200, | |
url: "http://cdn-0.nflximg.com/images/2891/BadBoys200.jpg" | |
}, { | |
videoId: 654356453, | |
width: 140, | |
height: 200, | |
url: "http://cdn-0.nflximg.com/images/2891/BadBoys140.jpg" | |
}], | |
bookmarks = [{ | |
videoId: 65432445, | |
time: 32432 | |
}, { | |
videoId: 675465, | |
time: 3534543 | |
}, { | |
videoId: 70111470, | |
time: 645243 | |
}, { | |
videoId: 654356453, | |
time: 984934 | |
}]; | |
var area = function (width, height) { | |
return width * height; | |
}; | |
return lists. | |
map(function (list) { | |
var _videos = videos.filter(function (video) { | |
return video.listId === list.id; | |
}) | |
. | |
concatMap(function (video) { | |
var _boxarts = boxarts.filter(function (boxart) { | |
return boxart.videoId === video.id; | |
}) | |
. | |
reduce(function (smallBoxart, currBoxart) { | |
var smallBoxartArea = area(smallBoxart.width, smallBoxart.height); | |
var currBoxartArea = area(currBoxart.width, currBoxart.height); | |
return smallBoxartArea < currBoxartArea ? smallBoxart : currBoxart; | |
}); | |
var _bookmarks = bookmarks.filter(function (bookmark) { | |
return bookmark.videoId === video.id; | |
}); | |
return Array.zip(_boxarts, _bookmarks, function (boxart, bookmark) { | |
return { | |
id: video.id, | |
title: video.title, | |
time: bookmark.time, | |
boxart: boxart.url | |
}; | |
}); | |
}); | |
return { | |
name: list.name, | |
videos: _videos | |
}; | |
}); | |
// complete this expression | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function(pricesNASDAQ, printRecord) { | |
var microsoftPrices, | |
now = new Date(), | |
tenDaysAgo = new Date( now.getFullYear(), now.getMonth(), now.getDate() - 10); | |
// use filter() to filter the trades for MSFT prices recorded any time after 10 days ago | |
microsoftPrices = | |
pricesNASDAQ. | |
filter(function MSFTrecord(priceRecord) { | |
return priceRecord.name === 'MSFT'; | |
}). | |
filter(function last10Days(priceRecord) { | |
return now - priceRecord.timeStamp < tenDaysAgo; | |
});// finish this expression | |
// Print the trades to the output console | |
microsoftPrices. | |
forEach(function(priceRecord) { | |
printRecord(priceRecord); | |
}); | |
} | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function(button) { | |
// the button click handler | |
var handler = function(ev) { | |
// Unsubscribe from the button event. | |
button.removeEventListener("click", handler); | |
alert("Button was clicked. Unsubscribing from event."); | |
}; | |
// add the button click handler | |
button.addEventListener("click", handler); | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment