Skip to content

Instantly share code, notes, and snippets.

@san-sekhon
Created July 15, 2017 08:01
Show Gist options
  • Save san-sekhon/71f44c598eac53284036609303b3491c to your computer and use it in GitHub Desktop.
Save san-sekhon/71f44c598eac53284036609303b3491c to your computer and use it in GitHub Desktop.
Scott Rudiger Revised Readiness Assessment
/*
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