diff --git a/package-lock.json b/package-lock.json index d663c98a..6751df13 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,6 +5,7 @@ "requires": true, "packages": { "": { + "name": "js-fundamentals", "version": "1.0.0", "license": "ISC", "devDependencies": { diff --git a/spec/data-types/objects/object-keys.spec.js b/spec/data-types/objects/object-keys.spec.js index b8e8b0dc..f1e47d21 100644 --- a/spec/data-types/objects/object-keys.spec.js +++ b/spec/data-types/objects/object-keys.spec.js @@ -1,31 +1,31 @@ -const answers = require('../../../src/data-types/objects/object-keys.js') +const answers = require("../../../src/data-types/objects/object-keys.js"); -describe('Objects Keys:', () => { - it('name should be equal to the book name', () => { - expect(answers.name).toEqual('Clean Code') - }) +describe("Objects Keys:", () => { + it("name should be equal to the book name", () => { + expect(answers.name).toEqual("Clean Code"); + }); - it('ISBN 10 should be equal to the book\'s ISBN 10 number', () => { - expect(answers.isbn10).toEqual('9780132350884') - }) + it("ISBN 10 should be equal to the book's ISBN 10 number", () => { + expect(answers.isbn10).toEqual("9780132350884"); + }); - it('Book category should be Programming', () => { - expect(answers.book.category).toEqual('Programming') - }) + it("Book category should be Programming", () => { + expect(answers.book.category).toEqual("Programming"); + }); - it('Book pages should be 464', () => { - expect(answers.book.pages).toEqual(464) - }) + it("Book pages should be 464", () => { + expect(answers.book.pages).toEqual(464); + }); - it('Book ISBN 13 should be 978-0132350884', () => { - expect(answers.book.isbn.isbn13).toEqual('978-0132350884') - }) + it("Book ISBN 13 should be 978-0132350884", () => { + expect(answers.book.isbn.isbn13).toEqual("978-0132350884"); + }); - it('Book should not contain the dimensions key - it should be deleted', () => { - expect(answers.book.dimensions).not.toBeDefined() - }) + it("Book should not contain the dimensions key - it should be deleted", () => { + expect(answers.book.dimensions).not.toBeDefined(); + }); - it('Book should not contain the asin key - it should be deleted', () => { - expect(answers.book.isbn.asin).not.toBeDefined() - }) -}) + it("Book should not contain the asin key - it should be deleted", () => { + expect(answers.book.isbn.asin).not.toBeDefined(); + }); +}); diff --git a/spec/variables/assignment.spec.js b/spec/variables/assignment.spec.js index 265ae766..d88558ba 100644 --- a/spec/variables/assignment.spec.js +++ b/spec/variables/assignment.spec.js @@ -9,3 +9,6 @@ describe("Variable Assignment:", () => { expect(b).toEqual(42) }) }) + +//jasmine is for unit testing +// it() is the spec \ No newline at end of file diff --git a/src/conditional-flow/boolean-conditions.js b/src/conditional-flow/boolean-conditions.js index 70b623d4..0738dbf9 100644 --- a/src/conditional-flow/boolean-conditions.js +++ b/src/conditional-flow/boolean-conditions.js @@ -4,9 +4,16 @@ function getResult (didPass) { // TODO: write code in this function body to pass the tests + + // if (didPass) { + // return "Well done, you passed!"; + // } else { + // return "Sorry, try again"; + // } -} + return (didPass ? "Well done, you passed!" : "Sorry, try again"); +} module.exports = { a: getResult } diff --git a/src/conditional-flow/multiple-conditions.js b/src/conditional-flow/multiple-conditions.js index 80420abf..6f755f34 100644 --- a/src/conditional-flow/multiple-conditions.js +++ b/src/conditional-flow/multiple-conditions.js @@ -1,19 +1,22 @@ // This function should return true if num is greater // than or equal to lower AND less than or equal to upper. // Implement this with a single condition. -function isInRange (num, lower, upper) { - +function isInRange(num, lower, upper) { // TODO: write code in this function body to pass the tests - + return num >= lower && num <= upper; } // This function should return true if the passed string is equal // to "Hello" or "Goodbye". Implement this with a single // if statement. -function isHelloOrGoodbye (val1) { - +function isHelloOrGoodbye(val1) { // TODO: write code in this function body to pass the tests + if (val1 === "Hello" || val1 === "Goodbye") { + return true; + } else { + return false; + } } // This function should return a string that describes the provided age value. The @@ -28,13 +31,24 @@ function isHelloOrGoodbye (val1) { // 5-12 | Child // 13-19 | Teenager // 20+ | Adult -function getAgeDescription (age) { - +function getAgeDescription(age) { // TODO: write code in this function body to pass the tests + + if (age === 0) { + return "Baby"; + } else if (age <= 4) { + return "Toddler"; + } else if (age <= 12) { + return "Child"; + } else if (age <= 19) { + return "Teenager"; + } else { + return "Adult"; + } } module.exports = { a: isInRange, b: isHelloOrGoodbye, - c: getAgeDescription -} + c: getAgeDescription, +}; diff --git a/src/conditional-flow/numeric-conditions.js b/src/conditional-flow/numeric-conditions.js index 0f6656a5..cc61af46 100644 --- a/src/conditional-flow/numeric-conditions.js +++ b/src/conditional-flow/numeric-conditions.js @@ -4,21 +4,22 @@ function isArrayEmpty (array) { // TODO: write code in this function body to pass the tests - + return (array.length === 0 ? true : false); } // This function should return true if num1 is greater than num2, false otherwise function isGreaterThan (num1, num2) { // TODO: write code in this function body to pass the tests - + return (num1 > num2 ? true : false); } // This function should return the lowest number in the passed array function findLowest (nums) { // TODO: write code in this function body to pass the tests - + numLowest = Math.min(...nums) + return numLowest } module.exports = { diff --git a/src/conditional-flow/string-conditions.js b/src/conditional-flow/string-conditions.js index d91bfaf0..beca0614 100644 --- a/src/conditional-flow/string-conditions.js +++ b/src/conditional-flow/string-conditions.js @@ -3,6 +3,8 @@ function isHello (val1) { // TODO: write code in this function body to pass the tests + return ( val1 === "Hello" ? true : false) + } // This function should return true if the passed string is not equal to "Hello" @@ -10,6 +12,8 @@ function isNotHello (val1) { // TODO: write code in this function body to pass the tests + return ( val1 !== "Hello" ? true : false) + } // This function should return true if the string val1 is is longer @@ -18,6 +22,8 @@ function isLongerThan (val1, val2) { // TODO: write code in this function body to pass the tests + return ( val1.length > val2.length ? true : false) + } // This function should return true if the string passed in the function's first @@ -27,7 +33,12 @@ function hasOddNumberVowels (val1) { // TODO: write code in this function body to pass the tests + const count = val1.match(/[aeiou]/gi).length; + + return (count % 2 !== 0 ? true : false); + } +// regEx - regular expression way to search through strings // this function should return the middle character of a string if it has an odd number // of characters. If there are an even number of characters the function should return @@ -35,7 +46,23 @@ function hasOddNumberVowels (val1) { function getMiddleLetter (val1) { // TODO: write code in this function body to pass the tests +// let numMiddle = 0 +// let numsMiddle = 0 + + if (val1.length % 2 === 0 ){ + numMiddle = (val1.length / 2) - 1; + numMiddle2 = numMiddle + 1; + + return `${val1.charAt(numMiddle)}${val1.charAt(numMiddle2)}`; + + + } else { + + numMiddle = val1.length / 2 ; + + return `${val1.charAt(numMiddle)}`; + } } // This function should return the name of the season for the provided @@ -50,6 +77,36 @@ function getMiddleLetter (val1) { function seasonForMonth (monthName) { // TODO: write code in this function body to pass the tests + + switch (monthName) { + case 'March': + case 'April': + case 'May': + szn = "Spring"; + break; + + case 'June': + case 'July': + case 'August': + szn = "Summer"; + break; + + case 'September': + case 'October': + case 'November': + szn = "Autumn"; + break; + + case 'December': + case 'January': + case 'February': + szn = "Winter"; + break; + + default: + szn = ""; + } + return szn } module.exports = { diff --git a/src/data-types/arrays/accessing-elements.js b/src/data-types/arrays/accessing-elements.js index 374a19bb..bfa479e8 100644 --- a/src/data-types/arrays/accessing-elements.js +++ b/src/data-types/arrays/accessing-elements.js @@ -4,16 +4,16 @@ const cities = ['London', 'Shanghai', 'New York', 'Delhi', 'Kuala Lumpur'] // TODO: write code to pass the tests // Set names equal to an array containing 'Bob', 'Jane', 'Joanna' in that order -const names = null +const names = ['Bob', 'Jane', 'Joanna'] // Set fourthCity to the 4th element in the cities array -const fourthCity = '' +const fourthCity = cities[3] // Set firstCity to the 1st element in the cities array -const firstCity = '' +const firstCity = cities[0] // Set lengthOfCitiesArray to the length of the cities array -const lengthOfCitiesArray = NaN +const lengthOfCitiesArray = cities.length // Do not edit this exported object module.exports = { diff --git a/src/data-types/arrays/adding-removing-elements.js b/src/data-types/arrays/adding-removing-elements.js index 69e559e8..a0ba7943 100644 --- a/src/data-types/arrays/adding-removing-elements.js +++ b/src/data-types/arrays/adding-removing-elements.js @@ -10,25 +10,25 @@ const fruits = ['Apple', 'Orange', 'Pear'] // TODO: write code to pass the tests // Edit this code to add 'Fred' to the names array -names.push(undefined) +names.push('Fred') // Edit this code to add 4 to the end of the numbers array -numbers.push(NaN) +numbers.push(4) // Edit this code to add 'Rio' to the start of the cities array -cities.unshift(undefined) +cities.unshift('Rio') // Use an array method to remove the first item from colours -colours +colours.shift() // Use an array method to remove the last item from keys -keys +keys.pop() // Use an array method to remove 'Jordon' from the countries array -countries.splice(NaN, NaN) +countries.splice(1,1) // use an array method to remove the last item from the fruits array and store the value in the pear variable -const pear = fruits.undefined +const pear = fruits.pop() // Do not edit this exported object module.exports = { diff --git a/src/data-types/numbers.js b/src/data-types/numbers.js index 01dd70de..8ec2eaa6 100644 --- a/src/data-types/numbers.js +++ b/src/data-types/numbers.js @@ -6,22 +6,22 @@ const numThree = 32 // TODO: Add code below using Javascript numeric operators so that the tests pass // Set this variable to numOne added to numTwo -const numOnePlusNumTwo = NaN +const numOnePlusNumTwo = numOne + numTwo // Set this variable to numThree multiplied by numTwo -const numThreeTimesNumTwo = NaN +const numThreeTimesNumTwo = numThree * numTwo // Set this variable to numThree divided by numOne -const numThreeDividedByNumOne = NaN +const numThreeDividedByNumOne = numThree / numOne // Set this variable to numThree minus numOne -const numThreeMinusNumOne = NaN +const numThreeMinusNumOne = numThree - numOne // Set this variable to the sum of numOne, numTwo and numThree -const sum = NaN +const sum = numOne + numTwo + numThree // Set this variable to the sum of (numOne, numTwo, numThree) divided by numOne -const numBytes = NaN +const numBytes = (numOne + numTwo + numThree) / numOne // do not edit the exported object. module.exports = { diff --git a/src/data-types/objects/creating-objects.js b/src/data-types/objects/creating-objects.js index 1939e6b0..88991464 100644 --- a/src/data-types/objects/creating-objects.js +++ b/src/data-types/objects/creating-objects.js @@ -1,7 +1,16 @@ // TODO: write code in this section to pass the tests. You will need to add new code // as well as modify some of the existing code -const person = null -const computer = null +const person = { + name: 'Jane', + age: 32 +} +const computer = { + form: 'laptop', + specs: { + memory: "16GB", + storage: "1TB" + } +} // Do not edit this exported object module.exports = { diff --git a/src/data-types/objects/object-keys.js b/src/data-types/objects/object-keys.js index 4999e940..49552cf8 100644 --- a/src/data-types/objects/object-keys.js +++ b/src/data-types/objects/object-keys.js @@ -1,30 +1,45 @@ // do not edit this section const book = { - name: 'Clean Code', - author: 'Robert C. Martin', - category: 'Cooking', + name: "Clean Code", + author: "Robert C. Martin", + category: "Cooking", isbn: { - isbn10: '9780132350884', - asin: '0132350882' + isbn10: "9780132350884", + asin: "0132350882", }, - publisher: 'Prentice Hall', - dimensions: '10x12x2' -} + publisher: "Prentice Hall", + dimensions: "10x12x2", +}; -const isbn13 = '978-0132350884' +const isbn13 = "978-0132350884"; // TODO: write code in this section to pass the tests. You will need to add new code // as well as modify some of the existing code // Set this to the book name -const name = '' +const name = book.name; // Set this to the isbn 10 value -const isbn10 = '' +const isbn10 = book.isbn.isbn10; + +// Set category to Programming +book.category = "Programming"; + +// Adding pages +book.pages = 464; + +// Adding isbn13 number +book.isbn.isbn13 = isbn13; + +// Delete book dimensions +delete book.dimensions; + +// Delete asin number +delete book.isbn.asin; // Do not edit this exported object module.exports = { name: name, isbn10: isbn10, - book: book -} + book: book, +}; diff --git a/src/data-types/objects/objects-and-arrays.js b/src/data-types/objects/objects-and-arrays.js index e4819467..db1c13d2 100644 --- a/src/data-types/objects/objects-and-arrays.js +++ b/src/data-types/objects/objects-and-arrays.js @@ -2,34 +2,41 @@ const basket = { items: [ { - name: 'Apple', + name: "Apple", quantity: 10, - price: 1 + price: 1, }, { - name: 'Lemon', + name: "Lemon", quantity: 2, - price: 0.5 - } + price: 0.5, + }, ], - voucherCodes: [ - 'AA-AA-A', - 'BB-BB-B' - ] -} + voucherCodes: ["AA-AA-A", "BB-BB-B"], +}; // TODO: write code in this section to pass the tests. You will need to add new code // as well as modify some of the existing code // Set this variable to the length of the baskets voucher codes array -const numberOfVoucherCodes = null +const numberOfVoucherCodes = basket.voucherCodes.length; // Set this variable to the first element in of the baskets voucher codes array -const firstVoucherCode = null +const firstVoucherCode = basket.voucherCodes[0]; + +// updated apple price +basket.items[0].price = 2; + +// adding to array +basket.items[2] = { + name: "Oranges", + price: 0.75, + quantity: 4, +}; // Do not edit this exported object module.exports = { basket: basket, numberOfVoucherCodes: numberOfVoucherCodes, - firstVoucherCode: firstVoucherCode -} + firstVoucherCode: firstVoucherCode, +}; diff --git a/src/data-types/strings.js b/src/data-types/strings.js index a8eb8c5b..d20f17d3 100644 --- a/src/data-types/strings.js +++ b/src/data-types/strings.js @@ -6,16 +6,16 @@ const secondName = 'Smith' // TODO: Update the code using Javascript string operations and the variables above so that the tests pass. // Set this variable to firstName and secondName concatenated -const fullName = null +const fullName = firstName + ` ` + secondName // Set this variable to the 10th character of the alphabet variable -const tenthCharacterOfAlphabet = null +const tenthCharacterOfAlphabet = alphabet.charAt(9) // Set this variable by calling a method on the alphabet variable to transform it to lower case -const lowerCaseAlphabet = null +const lowerCaseAlphabet = alphabet.toLowerCase() // Set this variable by using a property on the alphabet variable to get it's length -const numberOfLettersInAlphabet = null +const numberOfLettersInAlphabet = alphabet.length // do not edit the exported object. module.exports = { diff --git a/src/demo/demo.js b/src/demo/demo.js index 9201bd8a..64ed9e51 100644 --- a/src/demo/demo.js +++ b/src/demo/demo.js @@ -1,17 +1,17 @@ // do not edit this section -const numOne = 10 -const numTwo = 2 -let numThree = 0 +const numOne = 10; +const numTwo = 2; +let numThree = 0; // TODO: Update numThree so the tests pass -numThree = 0 +numThree = 5; // TODO: Update the code below so that the tests pass -const numOnePlusNumTwo = 0 // Set this variable to numOne plus numTwo +const numOnePlusNumTwo = 12; // Set this variable to numOne plus numTwo // do not edit this section module.exports = { a: numThree, - b: numOnePlusNumTwo -} + b: numOnePlusNumTwo, +}; diff --git a/src/functions/calling-functions.js b/src/functions/calling-functions.js index f44038d6..4cc96add 100644 --- a/src/functions/calling-functions.js +++ b/src/functions/calling-functions.js @@ -19,13 +19,13 @@ function sayHelloManyTimes (name, times) { // TODO: Add and update code here to make the tests pass // Set this variable to 'Hello' by calling the sayHello function -const hello = '' +const hello = sayHello() // Set this variable variable to 'Hello Jane' calling the sayHelloTo function -const helloToJane = '' +const helloToJane = sayHelloTo('Jane') // Set this variable to 'Hello Bob! Hello Bob! Hello Bob!' calling the sayHelloManyTimes function -const helloToBob3Times = '' +const helloToBob3Times = sayHelloManyTimes('Bob', 3) // do not edit below this line module.exports = { diff --git a/src/functions/creating-functions-multiple-args.js b/src/functions/creating-functions-multiple-args.js index a437ae8a..d5643726 100644 --- a/src/functions/creating-functions-multiple-args.js +++ b/src/functions/creating-functions-multiple-args.js @@ -10,6 +10,14 @@ // // TODO: write code below +const arrayMaker = function (lower, upper){ +const numsArray = [] + for (let i=lower; i <= upper; i++){ + numsArray.push(i) + } + return numsArray +} + // define a function that takes two arguments: a string and a number. // The function should return the same string but in upper case with exclamation // marks appended to the end. The number of exclamation marks should be @@ -22,8 +30,20 @@ // // TODO: write code below +const alert = function (str, num){ + + stringUpper = str.toUpperCase(); + + for (let i = 0; i < num; i++){ + stringUpper += '!'; + } + + return stringUpper; + } + + // change the exported value to be the name of the function you defined module.exports = { - a: undefined, // change undefined to be the name of the function defined to create the range of numbers (the first todo) - b: undefined // change undefined to be the name of the function defined to return the string with exclamations (the second todo) + a: arrayMaker, // change undefined to be the name of the function defined to create the range of numbers (the first todo) + b: alert // change undefined to be the name of the function defined to return the string with exclamations (the second todo) } diff --git a/src/functions/creating-functions.js b/src/functions/creating-functions.js index 2d2ac5e6..12f7339b 100644 --- a/src/functions/creating-functions.js +++ b/src/functions/creating-functions.js @@ -7,7 +7,9 @@ // 2 | 3 // // TODO: write code below - +function incrementer (a){ + return a + 1 +} // Define a function that takes any person's name and returns it with a smiley :)! // Remember to make the name capitalized! // @@ -19,8 +21,13 @@ // // TODO: write code below +const hi = function (name) { + const str = `Hi, ${name} :)` + return str.slice(0,4) + str.charAt(4).toUpperCase() + str.slice(5); +} + // TODO: change undefined to be the name of the functions you defined module.exports = { - a: undefined, // change undefined to be the name of the function you defined to increment a number (the first TODO) - b: undefined // change undefined to be the name of the function you defined to say hi (the second TODO) + a: incrementer, // change undefined to be the name of the function you defined to increment a number (the first TODO) + b: hi // change undefined to be the name of the function you defined to say hi (the second TODO) } diff --git a/src/loops/for-loop-and-arrays.js b/src/loops/for-loop-and-arrays.js index 682995ec..ca7b84e2 100644 --- a/src/loops/for-loop-and-arrays.js +++ b/src/loops/for-loop-and-arrays.js @@ -8,18 +8,42 @@ let word = '' // Use a for loop to set the sum variable to the sum of all the values in nums sum = 0 +for (let i =0; i < nums.length; i++){ + sum += nums[i] +} + // Use a for loop to populate doubledNums with every value from nums array doubled (i.e [2, 6, 24, etc...]) +// const doubledNums = [] const doubledNums = [] +for (let i = 0; i < nums.length; i++){ + doubledNums.push((nums[i]*2)) +} + // Use a for loop to set word equal to all the letters in the letters array word = '' +for (let i = 0; i < letters.length; i++){ + word += letters[i] +} + // Use a for loop to populate everySecondNum with every second number from the nums array const everySecondNum = [] +for (let i = 1; i < nums.length; i+=2){ + // if(i % 2 === 1){ + // } + everySecondNum.push(nums[i]) +} + // Use a for loop to populate numsReversed with the numbers from nums in reverse order const numsReversed = [] +for (let i = nums.length - 1; i >= 0; i--){ + numsReversed.push(nums[i]) +} + + // do not change below this line module.exports = { a: sum, diff --git a/src/loops/for-loop-basic.js b/src/loops/for-loop-basic.js index 38a5c971..c927c3dc 100644 --- a/src/loops/for-loop-basic.js +++ b/src/loops/for-loop-basic.js @@ -4,13 +4,23 @@ const evenNums = [] const countdown = [] // TODO: Write a for loop that adds the numbers 0 to 3 to the numsZeroToThree array +for (let i = 0; i < 4; i++) { + numsZeroToThree.push(i) +} // TODO: Write a for loop that adds the numbers 5 to 10 to the numsFiveToTen array - +for (let i = 5; i < 11; i++) { + numsFiveToTen .push(i) +} // TODO: Write a for loop that adds all the even numbers between 0 and 6 (0, 2, 4, 6) to evenNums - +for (let i = 0; i < 7; i++) { + if (i % 2 === 0) + evenNums.push(i) +} // TODO: Write a for loop that adds the numbers 3 to 0 (in that order) to the countdown array - +for (let i = 3; i > -1; i--) { + countdown.push(i) +} // do not change below this line module.exports = { a: numsZeroToThree, diff --git a/src/variables/assignment.js b/src/variables/assignment.js index 98f2e31c..50ad35c0 100644 --- a/src/variables/assignment.js +++ b/src/variables/assignment.js @@ -3,9 +3,9 @@ let firstNumber = 10 firstNumber = 0 // TODO: Set the value of firstNumber below so the tests pass - +firstNumber = 20 // TODO: Change the code below so that the tests pass -const secondNumber = 0 // edit this value +const secondNumber = 42 // edit this value // do not edit the exported object. module.exports = { diff --git a/src/variables/declaration.js b/src/variables/declaration.js index 8afaa55b..638101aa 100644 --- a/src/variables/declaration.js +++ b/src/variables/declaration.js @@ -2,13 +2,15 @@ // // // TODO: Declare the variables firstName and age so that the tests pass - +let firstName = `Jane` +let age = 35 // do not edit below this line let firstNameExport = '' try { firstNameExport = firstName } catch (e) {} let ageExport = 0 try { ageExport = age } catch (e) {} +//try { tries to run this code } if there's an error it is 'caught' and defined as e? module.exports = { firstName: firstNameExport,