Skip to content

Instantly share code, notes, and snippets.

@san-sekhon
Forked from BMCooley/assess.js
Created July 15, 2017 07:59
Show Gist options
  • Save san-sekhon/30cc928bc3d51d4ea2b3e13be3580575 to your computer and use it in GitHub Desktop.
Save san-sekhon/30cc928bc3d51d4ea2b3e13be3580575 to your computer and use it in GitHub Desktop.
Readiness Assessment - Ben Cooley
//Readiness Assessment - Ben Cooley - Monday, May 1, 2017
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'}];
// Parts 1 -4forEach, map, filter, reduce
//PART 1 -----------------------------
function capitalize(salesTeam) {
// input - array
//forEach
//item.name.first
//first cahr to uppercase
//item.name.last
//first cahr to Upper
salesTeam.forEach(function(item, index){
salesTeam[index].name.first = salesTeam[index].name.first.substring(0,1).toUpperCase() + salesTeam[index].name.first.substring(1);
salesTeam[index].name.last = salesTeam[index].name.last.substring(0,1).toUpperCase() + salesTeam[index].name.last.substring(1);
});
// output - no
}
// Part 2 ---------------
function assert(expectedBehavior, descriptionOfCorrectBehavior) {
if (!expectedBehavior) {
console.log(descriptionOfCorrectBehavior);
} else {
console.log('test passed');
}
}
//Edit the below invocation of the below assert function to use JSON.stringify() where necessary to test your capitalize function.
console.log(JSON.stringify(salesTeam[2].name));
capitalize(salesTeam);
assert(JSON.stringify(capitalize(salesTeam[2].name)) === JSON.stringify({first: 'Denese', last: 'Dossett'}), 'should capitalize the first letter of the first and last names');
// Part 3 ---------------
var averageTeamSales = function (salesTeam) {
//input team array
var sum = salesTeam.reduce(function(memo, item){
num = parseInt(item.sales.substring(1));
return memo + num;
}, 0)
return Math.floor((sum/salesTeam.length)+0.99);
//reduce array
// parseInt(sales.substring(1))
// memo += sales
//reduce / length of input array
//output = NUMBER - avg sales(rounded)
}
//PART 4 ----------------
var output = averageTeamSales(salesTeam);
var expected = 7487;
assert(output === expected, 'Should accurately average the sales of the team')
//Part 5 ----------
//"Earline Erickson: $18876"
var highestEarner = function (companies) {
var maxSales = 0;
var maxIndex = 0;
var result;
for (var i =0; i <companies.length; i++) {
var sales = parseInt(companies[i].sales.substring(1))
if (sales > maxSales){
maxSales = sales;
maxIndex = i;
result = '' + companies[i].name.first + ' ' + companies[i].name.last + ': ' + companies[i].sales;
}
}
return result;
//iterate
//if index.sales > max sales
// set maxSales
//set macindex
//set result = index. name.first + .name.lst + .sales
// return result
};
output = highestEarner(salesTeam);
expected = "Earline Erickson: $18876";
assert(output === expected, 'Should accurately define the teamMemeber with the highest Sales');
// Part 6 -----------
function filter(collection, predicate) {
// if predicate = true, then add item to memo
if (Array.isArray(collection)){
return collection.reduce(function(memo, item){
if (predicate(item)){
memo.push(item);
return memo;
}
return memo;
}, []);
}
return collection.reduce(function(memo, item){
if (predicate(item)){
memo[item] = memo[item];
return memo;
}
return memo;
}, {});
}
// 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);
}
}
}
//And here is a sample implementation:
var arr = [1, 2, 3, 4];
var obj = {
a: 1,
b: 2,
c: 3,
d: 4
}
function isEven(val) {
return val % 2 === 0;
}
function isOdd(val) {
return !isEven(val);
}
var output1 = filter(arr, isEven);
console.log(output1); // --> [2, 4];
var output2 = filter(obj, isOdd);
console.log(output2); // --> [1, 3];
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment