Last active
March 27, 2018 23:52
-
-
Save liseferguson/508536b3ddfe0e1aafc62af497298b5a to your computer and use it in GitHub Desktop.
Objects drills 2
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.) Make Student Reports | |
| function makeStudentsReport(data) { | |
| const results = []; | |
| for (let i = 0; i < data.length; i++) { | |
| const item = data[i]; | |
| results.push(`${item.name}: ${item.grade}`); | |
| } | |
| return results; | |
| } | |
| /* From here down, you are not expected to | |
| understand.... for now :) | |
| Nothing to see here! | |
| */ | |
| // tests | |
| function testIt() { | |
| const testData = [ | |
| { name: 'Jane Doe', grade: 'A' }, | |
| { name: 'John Dough', grade: 'B' }, | |
| { name: 'Jill Do', grade: 'A' }, | |
| ]; | |
| const expectations = ['Jane Doe: A', 'John Dough: B', 'Jill Do: A']; | |
| const results = makeStudentsReport(testData); | |
| if (!(results && results instanceof Array)) { | |
| console.error('FAILURE: `makeStudentsReport` must return an array'); | |
| return; | |
| } | |
| if (results.length !== testData.length) { | |
| console.error( | |
| 'FAILURE: test data had length of ' + | |
| testData.length + | |
| ' but `makeStudentsReport` returned array of length ' + | |
| results.length | |
| ); | |
| return; | |
| } | |
| for (let i = 0; i < expectations.length; i++) { | |
| let expect = expectations[i]; | |
| if ( | |
| !results.find(function(item) { | |
| return item === expect; | |
| }) | |
| ) { | |
| console.error( | |
| 'FAILURE: `makeStudentsReport` is not ' + 'producing expected strings' | |
| ); | |
| return; | |
| } | |
| } | |
| console.log('SUCCESS: `makeStudentsReport` is working'); | |
| } | |
| testIt(); | |
| 2.) Enroll in Summer Job | |
| const studentData = [ | |
| { | |
| name: 'Tim', | |
| status: 'Current student', | |
| course: 'Biology', | |
| }, | |
| { | |
| name: 'Sue', | |
| status: 'Withdrawn', | |
| course: 'Mathematics', | |
| }, | |
| { | |
| name: 'Liz', | |
| status: 'On leave', | |
| course: 'Computer science', | |
| }, | |
| ]; | |
| function enrollInSummerSchool(students) { | |
| const results= []; | |
| for (let i = 0; i < students.length; i++) { | |
| results.push({ | |
| name: students[i].name, | |
| status: "In Summer School", | |
| course: students[i].course, | |
| }) | |
| } | |
| return results; | |
| } | |
| 3.) Find by ID | |
| // you can pass in `scratchData` to test out `findByid` | |
| // your function | |
| const scratchData = [ | |
| { id: 22, foo: 'bar' }, | |
| { id: 28, foo: 'bizz' }, | |
| { id: 19, foo: 'bazz' }, | |
| ]; | |
| function findById(items, idNum) { | |
| for (let x = 0; x < items.length; x++) { | |
| if(idNum === items[x].id) { | |
| return items[x]; | |
| } | |
| } | |
| } | |
| // | |
| function testIt() { | |
| const testData = [ | |
| { id: 1, foo: 'bar' }, | |
| { id: 2, foo: 'bizz' }, | |
| { id: 3, bang: 'boo' }, | |
| ]; | |
| const result = findById(testData, 3); | |
| if (!(result && result !== null && typeof result === 'object')) { | |
| console.error('`findById` must return an object'); | |
| 4.) Validate Object Keys | |
| // running the function with `objectA` and `expectedKeys` | |
| // should return `true` | |
| const objectA = { | |
| id: 2, | |
| name: 'Jane Doe', | |
| age: 34, | |
| city: 'Chicago', | |
| }; | |
| // running the function with `objectB` and `expectedKeys` | |
| // should return `false` | |
| const objectB = { | |
| id: 3, | |
| age: 33, | |
| city: 'Peoria', | |
| }; | |
| const expectedKeys = ['id', 'name', 'age', 'city']; | |
| function validateKeys(object, expectedKeys) { | |
| if (Object.keys(object).length !== expectedKeys.length) { | |
| return false; | |
| } | |
| for (let i = 0; i < expectedKeys.length; i++) { | |
| if (!Object.keys(object).find(key => key === expectedKeys[i])) { | |
| } | |
| } | |
| return true; | |
| } | |
| /* From here down, you are not expected to | |
| understand.... for now :) | |
| Nothing to see here! | |
| */ | |
| function testIt() { | |
| const objectA = { | |
| id: 2, | |
| name: 'Jane Doe', | |
| age: 34, | |
| city: 'Chicago', | |
| }; | |
| const objectB = { | |
| id: 3, | |
| age: 33, | |
| city: 'Peoria', | |
| }; | |
| const objectC = { | |
| id: 9, | |
| name: 'Billy Bear', | |
| age: 62, | |
| city: 'Milwaukee', | |
| status: 'paused', | |
| }; | |
| const objectD = { | |
| foo: 2, | |
| bar: 'Jane Doe', | |
| bizz: 34, | |
| bang: 'Chicago', | |
| }; | |
| const expectedKeys = ['id', 'name', 'age', 'city']; | |
| if (typeof validateKeys(objectA, expectedKeys) !== 'boolean') { | |
| console.error('FAILURE: validateKeys should return a boolean value'); | |
| return; | |
| } | |
| if (!validateKeys(objectA, expectedKeys)) { | |
| console.error( | |
| `FAILURE: running validateKeys with the following object and keys | |
| should return true but returned false: | |
| Object: ${JSON.stringify(objectA)} | |
| Expected keys: ${expectedKeys}` | |
| ); | |
| return; | |
| } | |
| if (validateKeys(objectB, expectedKeys)) { | |
| console.error( | |
| `FAILURE: running validateKeys with the following object and keys | |
| should return false but returned true: | |
| Object: ${JSON.stringify(objectB)} | |
| Expected keys: ${expectedKeys}` | |
| ); | |
| return; | |
| } | |
| if (validateKeys(objectC, expectedKeys)) { | |
| console.error( | |
| `FAILURE: running validateKeys with the following object and keys | |
| should return false but returned true: | |
| Object: ${JSON.stringify(objectC)} | |
| Expected keys: ${expectedKeys}` | |
| ); | |
| return; | |
| } | |
| if (validateKeys(objectD, expectedKeys)) { | |
| console.error( | |
| `FAILURE: running validateKeys with the following object and keys | |
| should return false but returned true: | |
| Object: ${JSON.stringify(objectD)} | |
| Expected keys: ${expectedKeys}` | |
| ); | |
| return; | |
| } | |
| console.log('SUCCESS: validateKeys is working'); | |
| } | |
| testIt(); | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment