Created
July 15, 2017 08:01
-
-
Save san-sekhon/71f44c598eac53284036609303b3491c to your computer and use it in GitHub Desktop.
Scott Rudiger Revised Readiness Assessment
This file contains 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
/* | |
REVISED VERSION | |
Note: This is the revised version of my readiness assessment. For the original gist, see: | |
https://gist.github.com/ScottRudiger/1e5e6327050c4f315aa1d0a8f95e804f | |
After dinner, I came back to the RA and spent 15 minutes debugging my mistake in Part 4 and coding Parts 5 & 6. | |
Although I did not finish the RA in time (got stuck trying to find my syntax mistake in Part 4), | |
in deciding whether I'm ready to join the May cohort, I hope you consider that I was able to complete the problems in | |
a short amount of time afterwards. | |
Sincerely, | |
Scott Rudiger | |
*/ | |
var salesTeam = [{name: {first: 'aleen', last: 'atkins'}, age: 26, sales: '$2314'}, | |
{name: {first: 'alvaro', last: 'angelos'}, age: 55, sales: '$1668'}, | |
{name: {first: 'denese', last: 'dossett'}, age: 29, sales: '$9248'}, | |
{name: {first: 'douglas', last: 'denney'}, age: 53, sales: '$5058'}, | |
{name: {first: 'earline', last: 'erickson'}, age: 19, sales: '$18876'}, | |
{name: {first: 'herman', last: 'hazell'}, age: 25, sales: '$2746'}, | |
{name: {first: 'homer', last: 'hirth'}, age: 26, sales: '$474'}, | |
{name: {first: 'hwa', last: 'heidt'}, age: 53, sales: '$9607'}, | |
{name: {first: 'hyon', last: 'hampshire'}, age: 46, sales: '$13598'}, | |
{name: {first: 'issac', last: 'ingerson'}, age: 45, sales: '$5225'}, | |
{name: {first: 'jeraldine', last: 'joplin'}, age: 39, sales: '$2891'}, | |
{name: {first: 'jin', last: 'jeffrey'}, age: 17, sales: '$14402'}, | |
{name: {first: 'joleen', last: 'jolin'}, age: 45, sales: '$15736'}, | |
{name: {first: 'jude', last: 'jarrett'}, age: 53, sales: '$7557'}, | |
{name: {first: 'magda', last: 'mireles'}, age: 18, sales: '$1498'}, | |
{name: {first: 'mistie', last: 'montealegre'}, age: 31, sales: '$6920'}, | |
{name: {first: 'nancy', last: 'napoli'}, age: 49, sales: '$5255'}, | |
{name: {first: 'regine', last: 'rohrbaugh'}, age: 33, sales: '$7881'}, | |
{name: {first: 'rolando', last: 'riebel'}, age: 35, sales: '$8573'}, | |
{name: {first: 'scarlett', last: 'stagg'}, age: 36, sales: '$7126'}, | |
{name: {first: 'sherron', last: 'strawn'}, age: 36, sales: '$8848'}, | |
{name: {first: 'susan', last: 'shilling'}, age: 29, sales: '$8542'}, | |
{name: {first: 'tama', last: 'tworek'}, age: 16, sales: '$9200'}, | |
{name: {first: 'tonisha', last: 'taunton'}, age: 41, sales: '$5219'}, | |
{name: {first: 'vergie', last: 'villescas'}, age: 25, sales: '$8712'}]; | |
// Part 1: | |
function capitalize(salesTeam) { | |
// iterate through the employees | |
salesTeam.forEach(function(employee) { | |
// for each employee | |
// capitalize first letter of first name | |
var first = employee.name.first.split(''); | |
first[0] = first[0].toUpperCase(); | |
employee.name.first = first.join(''); | |
// capitalize first letter of last name | |
var last = employee.name.last.split(''); | |
last[0] = last[0].toUpperCase(); | |
employee.name.last = last.join(''); | |
}); | |
} | |
// Part 2: | |
function assert(expectedBehavior, descriptionOfCorrectBehavior) { | |
if (!expectedBehavior) { | |
console.log(descriptionOfCorrectBehavior); | |
} else { | |
console.log('test passed'); | |
} | |
} | |
capitalize(salesTeam); | |
assert(JSON.stringify(salesTeam[2].name) === JSON.stringify({first: 'Denese', last: 'Dossett'}), 'should capitalize the first letter of the first and last names'); | |
// Part 3: | |
function averageTeamSales(salesTeam) { | |
var salesTotal = []; | |
// iterate through the sales team | |
salesTeam.forEach(function(employee) { | |
// push the sales for each employee to salesTotal | |
salesTotal.push(employee.sales); | |
}); | |
// convert each employees sales from a string to a number | |
salesTotal = salesTotal.map(function(sales) { | |
// convert each sales string to a number, excluding the $ | |
return Number(sales.split('').slice(1).join('')); | |
}); | |
// compute average of salesTotal | |
// return the average | |
return Number(average(salesTotal).toFixed(0)); | |
} | |
function sum(numbers) { | |
// sums every number passed in | |
return numbers.reduce(function(nums, num) { | |
return nums + num; | |
}); | |
} | |
function average(numbers) { | |
// return the average of numbers | |
return sum(numbers) / numbers.length; | |
} | |
var arr = [1, 2, 3]; | |
assert(sum(arr) === 6, 'incorrectly sums numbers'); | |
assert(average(arr) === 2, 'incorrectly averages numbers'); | |
assert(averageTeamSales(salesTeam) === 7487, 'incorrectly averages the teams\' sales'); | |
// Part 5: | |
function highestEarner(salesTeam) { | |
// pull out the sales from each employee | |
var salesAmounts = salesTeam.map(function(employee) { | |
return Number(employee.sales.slice(1)); | |
}); | |
// find the highest sales amount | |
var highestSalesAmount = Math.max.apply(null, salesAmounts); | |
// find the corresponding employee with the highest sales | |
var highestEarner = salesTeam[salesAmounts.indexOf(highestSalesAmount)]; | |
// return the output as a string 'first last: sales' | |
return highestEarner.name.first + ' ' + highestEarner.name.last + ': ' + highestEarner.sales; | |
} | |
assert(highestEarner(salesTeam) === 'Earline Erickson: $18876'); | |
// Part 6: | |
function filter(collection, predicate) { | |
// Your code below. You must use reduce in your solution. | |
// iterate through the collection | |
// var passes = []; | |
// each(collection, function(item) { | |
// var coll = []; | |
// coll.push(item); | |
// if (reduce(coll, predicate, item)) { | |
// passes.push(item); | |
// } | |
// }); | |
var passes = []; | |
// go through each item of the collection with reduce | |
return reduce(collection, function(passes, item) { | |
// if the item passes the predicate test, add it to passes | |
if (predicate(item)) { | |
passes.push(item); | |
} | |
// keep returning passes so that passes is built up each time an item passes | |
return passes; | |
}, []); | |
} | |
// DO NOT ADJUST BELOW FUNCTIONS | |
function reduce(collection, accumulator, initialValue) { | |
each(collection, function(val) { | |
if (initialValue !== undefined) { | |
initialValue = accumulator(initialValue, val); | |
} else { | |
initialValue = val; | |
} | |
}) | |
return initialValue; | |
} | |
function each (collection, callback) { | |
if (Array.isArray(collection)) { | |
for (let i = 0; i < collection.length; i++) { | |
callback(collection[i], i, collection); | |
} | |
} else { | |
for (let key in collection) { | |
callback(collection[key], key, collection); | |
} | |
} | |
} | |
var actual1 = filter([0, 1, 2, 3, 4, 1.5], function(num) {return num > 1}); | |
var expected1 = [2, 3, 4, 1.5]; | |
var actual2 = filter({a: 1, b: 2, c: 3, d: 4}, function(num) {return num < 3}); | |
var expected2 = [1, 2]; | |
assert(JSON.stringify(actual1) === JSON.stringify(expected1), 'incorrectly filters an array'); | |
assert(JSON.stringify(actual2) === JSON.stringify(expected2), 'incorrectly filters an object'); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment