From 46d1d549f41ffa916ed00561d019ad9a7f635460 Mon Sep 17 00:00:00 2001 From: OlushoreOdude <108965036+OlushoreOdude@users.noreply.github.com> Date: Wed, 30 Nov 2022 18:04:22 +0000 Subject: [PATCH 01/11] Update 3-fibonacci.js completed fib, wrks in console, need to test with jest --- 3-extra/3-fibonacci.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/3-extra/3-fibonacci.js b/3-extra/3-fibonacci.js index 9ef9aec7..19315ebb 100644 --- a/3-extra/3-fibonacci.js +++ b/3-extra/3-fibonacci.js @@ -15,7 +15,14 @@ function generateFibonacciSequence(n) { // TODO + let arr = [ 0, 1]; + for (let i = 2; i < n; i++){ + let test = arr[arr.length - 1] + arr[arr.length - 2]; + arr.push(test); + } + return arr; } +console.log(generateFibonacciSequence(7)); /* ======= TESTS - DO NOT MODIFY ===== */ test("should return the first 10 numbers in the Fibonacci Sequence", () => { @@ -34,4 +41,4 @@ test("should return the first 15 numbers in the Fibonacci Sequence", () => { expect(generateFibonacciSequence(15)).toEqual( [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377] ); -}); \ No newline at end of file +}); From a1917b13041ee0830566ec905da760117da8d27f Mon Sep 17 00:00:00 2001 From: OlushoreOdude <108965036+OlushoreOdude@users.noreply.github.com> Date: Wed, 30 Nov 2022 20:02:50 +0000 Subject: [PATCH 02/11] Update 2-array-of-objects.js added compare function, works in console. need to test with jest. --- 3-extra/2-array-of-objects.js | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/3-extra/2-array-of-objects.js b/3-extra/2-array-of-objects.js index ee57960f..8dd197c3 100644 --- a/3-extra/2-array-of-objects.js +++ b/3-extra/2-array-of-objects.js @@ -12,8 +12,40 @@ function getHighestRatedInEachGenre(books) { // TODO + //sort the books array by the object keys + let newArr = [...books].sort((a, b) => a.rating - b.rating); + //sort highest to lowest // access and return the 1st index of the array + //loop over the books object + // + return newArr.map((e) => e.title) +} +function compare(a, b) { + if (a.rating > b.rating) { + return -1; + } + if (a.rating < b.rating ) { + return 1; + } + // a must be equal to b + return 0; } +function getHighestRatedInEachGenre(items) { + //console.log(items); + //let arr = [...items]; creates shallow copy + + // TODO + //sort the books array by the object keys + let qnewArr = [...items].sort(compare); + //without providing a compare funtion sort() sorts the items in the wrong order + // let qnewArr = items.sort((a, b) => a.rating - b.rating); + //console.log(qnewArr); + //sort highest to lowest // access and return the 1st index of the array + //loop over the books object to and return tiltes + // + let test = qnewArr.map((e) => e.title); + return test +} /* ======= Book data - DO NOT MODIFY ===== */ const BOOKS = [ @@ -79,4 +111,4 @@ test("should return the highest rated book in each genre", () => { "Dishoom: The first ever cookbook from the much-loved Indian restaurant" ] )); -}); \ No newline at end of file +}); From 825a9044e2774adf866eaf36651147edbe457e6c Mon Sep 17 00:00:00 2001 From: OlushoreOdude <108965036+OlushoreOdude@users.noreply.github.com> Date: Wed, 30 Nov 2022 20:21:58 +0000 Subject: [PATCH 03/11] Update 1-factorial.js works in console need to test on jest. --- 3-extra/1-factorial.js | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/3-extra/1-factorial.js b/3-extra/1-factorial.js index 31f8052c..e1ebf8fb 100644 --- a/3-extra/1-factorial.js +++ b/3-extra/1-factorial.js @@ -10,8 +10,28 @@ function factorial(input) { // TODO + let count = 0; + for (let i = 0; i >= input; i--){ + count = i *= i; + } + return count; +} +function factorial(input) { + // TODO + let count = 1; + for (let i = input; i > 0; i--){ + //reduce i by 1 till it is 1 + //1 * a number is 1 + console.log(i) + //tiems count by i and asign to count + count *= i; + console.log(count) + } + //exit loop when i is 1 + return count; } +console.log(factorial(5)); /* ======= TESTS - DO NOT MODIFY ===== */ test("3! should be 6", () => { From 2892aecd1c89e214800e90400ff55208988aa258 Mon Sep 17 00:00:00 2001 From: OlushoreOdude <108965036+OlushoreOdude@users.noreply.github.com> Date: Wed, 30 Nov 2022 20:37:36 +0000 Subject: [PATCH 04/11] Update 1-weather-report.js works in console. need to test on jest --- 2-mandatory/1-weather-report.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/2-mandatory/1-weather-report.js b/2-mandatory/1-weather-report.js index dcc2bdb0..6f41fad0 100644 --- a/2-mandatory/1-weather-report.js +++ b/2-mandatory/1-weather-report.js @@ -13,8 +13,13 @@ function getTemperatureReport(cities) { // TODO + let arr = cities.map((e) => { + let temp = temperatureService(e); + return `The temperature in ${e} is ${temp} degrees`; + }); + return arr; } - +console.log(getTemperatureReport(usersCities)); /* ======= TESTS - DO NOT MODIFY ===== */ @@ -60,4 +65,4 @@ test("should return a temperature report for the user's cities (alternate input) test("should return an empty array if the user hasn't selected any cities", () => { expect(getTemperatureReport([])).toEqual([]); -}); \ No newline at end of file +}); From e60295624cf6295a5f7baee8c53ac66dc507dcad Mon Sep 17 00:00:00 2001 From: OlushoreOdude <108965036+OlushoreOdude@users.noreply.github.com> Date: Wed, 30 Nov 2022 20:55:43 +0000 Subject: [PATCH 05/11] Update 2-retrying-random-numbers.js works in console. need to test on jest. --- 2-mandatory/2-retrying-random-numbers.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/2-mandatory/2-retrying-random-numbers.js b/2-mandatory/2-retrying-random-numbers.js index 10aab37d..0cf3331d 100644 --- a/2-mandatory/2-retrying-random-numbers.js +++ b/2-mandatory/2-retrying-random-numbers.js @@ -11,8 +11,16 @@ function generateRandomNumber() { function getRandomNumberGreaterThan50() { // TODO - implement using a do-while loop + let i = 0; + do { + let test = generateRandomNumber(); + let i = test; + console.log(i); + //test(); + } while ( i < 50); + return i; } - +console.log(getRandomNumberGreaterThan50()) /* ======= TESTS - DO NOT MODIFY ===== */ test("Returned value should always be greater than 50", () => { From 6e03a0abc33382a651230d1a12f11670e7d1b0ed Mon Sep 17 00:00:00 2001 From: OlushoreOdude <108965036+OlushoreOdude@users.noreply.github.com> Date: Wed, 30 Nov 2022 21:22:51 +0000 Subject: [PATCH 06/11] Update 3-financial-times.js added sudo code , need to add code and test --- 2-mandatory/3-financial-times.js | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/2-mandatory/3-financial-times.js b/2-mandatory/3-financial-times.js index 2ce6fb73..a6633a5d 100644 --- a/2-mandatory/3-financial-times.js +++ b/2-mandatory/3-financial-times.js @@ -6,6 +6,8 @@ */ function potentialHeadlines(allArticleTitles) { // TODO + //could potentislly use arr.filter(word => word.length <= 65) + } /* @@ -14,7 +16,19 @@ function potentialHeadlines(allArticleTitles) { (you can assume words will always be seperated by a space) */ function titleWithFewestWords(allArticleTitles) { - // TODO + // TODO + //arr.sort(compare) use coompare function with array.lenthe + //to get arr.length split sting at space (" "), + + //function compare(a,b){ + // if(a.length > b.length){ + // return -1} +// if(a.length < b.length){} + +//return 0 +//} + + //could potentislly use arr.filter(word => word.length > 6); // sort better fit } /* @@ -24,6 +38,8 @@ function titleWithFewestWords(allArticleTitles) { */ function headlinesWithNumbers(allArticleTitles) { // TODO + //arr.filter((e) => {e.match(/{d}+/g !!== true }) // need to check syntax +//}) use a regex function to macht for a number if return true should pass filter } /* @@ -32,6 +48,12 @@ function headlinesWithNumbers(allArticleTitles) { */ function averageNumberOfCharacters(allArticleTitles) { // TODO + //split the string into an array with .split() + // can .join() and split agin or use regex to replace white space with empty string + /// could potentialy use regex to match all the characteres /[a-z]+[0-9]+gi/ need to check syntax + /// if can match all infividual caharacters you can use the number to get the average + //use the arr.reduce( fill with syntax) + //divide return value from reduce by array.length (note would need to factor in white space in count unless included in characters)to get the average } From cf446b719fec41ea392b123879b01ec378b2871e Mon Sep 17 00:00:00 2001 From: OlushoreOdude <108965036+OlushoreOdude@users.noreply.github.com> Date: Thu, 1 Dec 2022 15:31:10 +0000 Subject: [PATCH 07/11] completed a - d --- 1-exercises/D-do-while/exercise.js | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/1-exercises/D-do-while/exercise.js b/1-exercises/D-do-while/exercise.js index f10d0764..38ba0db6 100644 --- a/1-exercises/D-do-while/exercise.js +++ b/1-exercises/D-do-while/exercise.js @@ -7,9 +7,26 @@ */ function evenNumbersSum(n) { + let count = 0; + let i = 0; + let sum = 0; + + do { + if (i % 2 === 0) { + sum += i; + count++; + i++; + //console.log(`i am ${count}`); + //console.log(i); + } else { + i++; + } + // TODO + } while (count < n); + return sum; } console.log(evenNumbersSum(3)); // should output 6 console.log(evenNumbersSum(0)); // should output 0 -console.log(evenNumbersSum(10)); // should output 90 \ No newline at end of file +console.log(evenNumbersSum(10)); // should output 90 From 1b17a9245da143dd7866a0284248f6384a80e6e0 Mon Sep 17 00:00:00 2001 From: OlushoreOdude <108965036+OlushoreOdude@users.noreply.github.com> Date: Thu, 1 Dec 2022 15:44:29 +0000 Subject: [PATCH 08/11] completed folder e --- 1-exercises/A-undefined/exercise.js | 14 ++++--- 1-exercises/B-while-loop/exercise.js | 16 +++++++- .../C-while-loop-with-array/exercise.js | 38 +++++++++++++------ 1-exercises/E-for-loop/exercise1.js | 11 ++++-- 1-exercises/E-for-loop/exercise2.js | 20 +++------- 5 files changed, 63 insertions(+), 36 deletions(-) diff --git a/1-exercises/A-undefined/exercise.js b/1-exercises/A-undefined/exercise.js index 0acfc78d..54a9625e 100644 --- a/1-exercises/A-undefined/exercise.js +++ b/1-exercises/A-undefined/exercise.js @@ -12,25 +12,27 @@ // Example 1 let a; console.log(a); - +// no value has been asigned to a // Example 2 function sayHello() { - let message = "Hello"; + let message = "Hello"; } let hello = sayHello(); console.log(hello); - +// the function is not being invoked +//their is also no return val;ue // Example 3 function sayHelloToUser(user) { - console.log(`Hello ${user}`); + console.log(`Hello ${user}`); } sayHelloToUser(); - +// no parameter is given but it is required // Example 4 -let arr = [1,2,3]; +let arr = [1, 2, 3]; console.log(arr[3]); +//arrays are zero indexed, index 3 does not exist, diff --git a/1-exercises/B-while-loop/exercise.js b/1-exercises/B-while-loop/exercise.js index b459888f..32717670 100644 --- a/1-exercises/B-while-loop/exercise.js +++ b/1-exercises/B-while-loop/exercise.js @@ -6,9 +6,23 @@ */ function evenNumbers(n) { - // TODO + //let text = ''; + let i = 0; + // TODO + let arr = []; + while (arr.length < n) { + if (i % 2 === 0) { + arr.push(i); + i++; + } else { + i++; + } + } + console.log(arr); } evenNumbers(3); // should output 0,2,4 evenNumbers(0); // should output nothing evenNumbers(10); // should output 0,2,4,6,8,10,12,14,16,18 + +//console.log(evenNumbers(3)); diff --git a/1-exercises/C-while-loop-with-array/exercise.js b/1-exercises/C-while-loop-with-array/exercise.js index d584cd75..3272a974 100644 --- a/1-exercises/C-while-loop-with-array/exercise.js +++ b/1-exercises/C-while-loop-with-array/exercise.js @@ -5,19 +5,35 @@ */ const BIRTHDAYS = [ - "January 7th", - "February 12th", - "April 3rd", - "April 5th", - "May 3rd", - "July 11th", - "July 17th", - "September 28th", - "November 15th" + "January 7th", + "February 12th", + "April 3rd", + "April 5th", + "May 3rd", + "July 11th", + "July 17th", + "September 28th", + "November 15th", ]; function findFirstJulyBDay(birthdays) { - // TODO + let text = ""; + let i = 0; + // TODO + //let arr = []; + while (i < birthdays.length) { + if (birthdays[i].includes("July")) { + text = birthdays[i]; + return text; + } else { + i++; + } + } + console.log(birthdays.includes("July")); } - +// note string prototype includes seems to work diffrently form +// the array prototype includes, array prototype includes seems +//more specific and returns false if the mactch is not exact +// string prototype inclues seems to work more like regex but +// only return true even if multiple accurence are found/ console.log(findFirstJulyBDay(BIRTHDAYS)); // should output "July 11th" diff --git a/1-exercises/E-for-loop/exercise1.js b/1-exercises/E-for-loop/exercise1.js index db5fac64..326c0983 100644 --- a/1-exercises/E-for-loop/exercise1.js +++ b/1-exercises/E-for-loop/exercise1.js @@ -4,11 +4,14 @@ Change the while loop below into a for loop. */ - // Change the below code to use a for loop instead of a while loop. let i = 0; -while(i < 26) { - console.log(String.fromCharCode(97 + i)); - i++; +while (i < 26) { + console.log(String.fromCharCode(97 + i)); + i++; } // The output shouldn't change. +for (let i = 0; i < 26; i++) { + console.log(String.fromCharCode(97 + i)); + //console.log(1); +} diff --git a/1-exercises/E-for-loop/exercise2.js b/1-exercises/E-for-loop/exercise2.js index 081002b2..74e240b8 100644 --- a/1-exercises/E-for-loop/exercise2.js +++ b/1-exercises/E-for-loop/exercise2.js @@ -10,23 +10,15 @@ Using a for loop, output to the console a line about the age of each writer. */ -const WRITERS = [ - "Virginia Woolf", - "Zadie Smith", - "Jane Austen", - "Bell Hooks", - "Yukiko Motoya" -] +const WRITERS = ["Virginia Woolf", "Zadie Smith", "Jane Austen", "Bell Hooks", "Yukiko Motoya"]; -const AGES = [ - 59, - 40, - 41, - 63, - 49 -]; +const AGES = [59, 40, 41, 63, 49]; // TODO - Write for loop code here +for (let i = 0; i < AGES.length; i++) { + //console.log(String.fromCharCode(97 + i)); + console.log(`${WRITERS[i]} is ${AGES[i]} years old`); +} /* The output should look something like this: From 15522522b19817566efcc51deeab15d4c539a679 Mon Sep 17 00:00:00 2001 From: OlushoreOdude <108965036+OlushoreOdude@users.noreply.github.com> Date: Thu, 1 Dec 2022 16:14:13 +0000 Subject: [PATCH 09/11] mandatory 1 and 2 passing jest test --- 1-exercises/F-for-of-loop/exercise.js | 20 +++++--- 2-mandatory/1-weather-report.js | 61 +++++++++++------------- 2-mandatory/2-retrying-random-numbers.js | 36 +++++++------- 3 files changed, 60 insertions(+), 57 deletions(-) diff --git a/1-exercises/F-for-of-loop/exercise.js b/1-exercises/F-for-of-loop/exercise.js index 65585c6a..db699ee9 100644 --- a/1-exercises/F-for-of-loop/exercise.js +++ b/1-exercises/F-for-of-loop/exercise.js @@ -4,13 +4,21 @@ // TODO Use a for-of loop to output each of the tube stations below. let tubeStations = [ - "Aldgate", - "Baker Street", - "Picadilly Circus", - "Oxford Street", - "Tottenham Court Road" + "Aldgate", + "Baker Street", + "Picadilly Circus", + "Oxford Street", + "Tottenham Court Road", ]; - +for (let station of tubeStations) { + console.log(station); +} // TODO Use a for-of loop to capitalise and output each letter in the string seperately. let str = "codeyourfuture"; +for (let letter of str) { + console.log(letter.toLocaleUpperCase()); +} + +// not for of works on strings (unexpected). and str.split() (expexted) +// as .split()converts to an array. diff --git a/2-mandatory/1-weather-report.js b/2-mandatory/1-weather-report.js index 6f41fad0..f4ecb676 100644 --- a/2-mandatory/1-weather-report.js +++ b/2-mandatory/1-weather-report.js @@ -12,57 +12,50 @@ */ function getTemperatureReport(cities) { - // TODO - let arr = cities.map((e) => { + // TODO + let arr = cities.map((e) => { let temp = temperatureService(e); return `The temperature in ${e} is ${temp} degrees`; - }); - return arr; + }); + return arr; } -console.log(getTemperatureReport(usersCities)); +//console.log(getTemperatureReport(usersCities)); /* ======= TESTS - DO NOT MODIFY ===== */ function temperatureService(city) { - let temparatureMap = new Map(); + let temparatureMap = new Map(); - temparatureMap.set('London', 10); - temparatureMap.set('Paris', 12); - temparatureMap.set('Barcelona', 17); - temparatureMap.set('Dubai', 27); - temparatureMap.set('Mumbai', 29); - temparatureMap.set('São Paulo', 23); - temparatureMap.set('Lagos', 33); - - return temparatureMap.get(city); + temparatureMap.set("London", 10); + temparatureMap.set("Paris", 12); + temparatureMap.set("Barcelona", 17); + temparatureMap.set("Dubai", 27); + temparatureMap.set("Mumbai", 29); + temparatureMap.set("São Paulo", 23); + temparatureMap.set("Lagos", 33); + + return temparatureMap.get(city); } test("should return a temperature report for the user's cities", () => { - let usersCities = [ - "London", - "Paris", - "São Paulo" - ] + let usersCities = ["London", "Paris", "São Paulo"]; - expect(getTemperatureReport(usersCities)).toEqual([ - "The temperature in London is 10 degrees", - "The temperature in Paris is 12 degrees", - "The temperature in São Paulo is 23 degrees" - ]); + expect(getTemperatureReport(usersCities)).toEqual([ + "The temperature in London is 10 degrees", + "The temperature in Paris is 12 degrees", + "The temperature in São Paulo is 23 degrees", + ]); }); test("should return a temperature report for the user's cities (alternate input)", () => { - let usersCities = [ - "Barcelona", - "Dubai" - ] + let usersCities = ["Barcelona", "Dubai"]; - expect(getTemperatureReport(usersCities)).toEqual([ - "The temperature in Barcelona is 17 degrees", - "The temperature in Dubai is 27 degrees" - ]); + expect(getTemperatureReport(usersCities)).toEqual([ + "The temperature in Barcelona is 17 degrees", + "The temperature in Dubai is 27 degrees", + ]); }); test("should return an empty array if the user hasn't selected any cities", () => { - expect(getTemperatureReport([])).toEqual([]); + expect(getTemperatureReport([])).toEqual([]); }); diff --git a/2-mandatory/2-retrying-random-numbers.js b/2-mandatory/2-retrying-random-numbers.js index 0cf3331d..37cf8fdd 100644 --- a/2-mandatory/2-retrying-random-numbers.js +++ b/2-mandatory/2-retrying-random-numbers.js @@ -5,28 +5,30 @@ // This function shouldn't be changed function generateRandomNumber() { - console.log("Generating number..."); - return Math.round(Math.random() * 100); + console.log("Generating number..."); + return Math.round(Math.random() * 100); } function getRandomNumberGreaterThan50() { - // TODO - implement using a do-while loop - let i = 0; - do { - let test = generateRandomNumber(); - let i = test; - console.log(i); - //test(); - } while ( i < 50); - return i; + // TODO - implement using a do-while loop + //let i = 0; + let test = 0; + do { + test = generateRandomNumber(); + //let i = test; + + //console.log(i); + //test(); + } while (test < 50); + return test; } -console.log(getRandomNumberGreaterThan50()) +console.log(getRandomNumberGreaterThan50()); /* ======= TESTS - DO NOT MODIFY ===== */ test("Returned value should always be greater than 50", () => { - expect(getRandomNumberGreaterThan50()).toBeGreaterThan(50); - expect(getRandomNumberGreaterThan50()).toBeGreaterThan(50); - expect(getRandomNumberGreaterThan50()).toBeGreaterThan(50); - expect(getRandomNumberGreaterThan50()).toBeGreaterThan(50); - expect(getRandomNumberGreaterThan50()).toBeGreaterThan(50); + expect(getRandomNumberGreaterThan50()).toBeGreaterThan(50); + expect(getRandomNumberGreaterThan50()).toBeGreaterThan(50); + expect(getRandomNumberGreaterThan50()).toBeGreaterThan(50); + expect(getRandomNumberGreaterThan50()).toBeGreaterThan(50); + expect(getRandomNumberGreaterThan50()).toBeGreaterThan(50); }); From bef936da33d12f0978b34b59c1b23d577e5599e5 Mon Sep 17 00:00:00 2001 From: OlushoreOdude <108965036+OlushoreOdude@users.noreply.github.com> Date: Thu, 15 Dec 2022 23:34:24 +0000 Subject: [PATCH 10/11] commit of explanations --- .gitignore | 2 + 2-mandatory/2-retrying-random-numbers.js | 3 +- 2-mandatory/3-financial-times.js | 180 ++++++++++++++++------- 2-mandatory/4-stocks.js | 114 ++++++++++---- 3-extra/1-factorial.js | 35 ++--- 3-extra/2-array-of-objects.js | 167 +++++++++++---------- 6 files changed, 326 insertions(+), 175 deletions(-) diff --git a/.gitignore b/.gitignore index 936e5c57..da7203d8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ /node_modules/ /package-lock.json +/3-extra/week7js1-3 +/3-extra/week8js1-L4 diff --git a/2-mandatory/2-retrying-random-numbers.js b/2-mandatory/2-retrying-random-numbers.js index 37cf8fdd..f7d41a7c 100644 --- a/2-mandatory/2-retrying-random-numbers.js +++ b/2-mandatory/2-retrying-random-numbers.js @@ -19,9 +19,10 @@ function getRandomNumberGreaterThan50() { //console.log(i); //test(); - } while (test < 50); + } while (test <= 50); return test; } +getRandomNumberGreaterThan50(); console.log(getRandomNumberGreaterThan50()); /* ======= TESTS - DO NOT MODIFY ===== */ diff --git a/2-mandatory/3-financial-times.js b/2-mandatory/3-financial-times.js index a6633a5d..bc201f65 100644 --- a/2-mandatory/3-financial-times.js +++ b/2-mandatory/3-financial-times.js @@ -1,3 +1,17 @@ +/*const ARTICLE_TITLES2 = [ + "Streaming wars drive media groups to spend more than $100bn on new content", + "Amazon Prime Video India country head: streaming is driving a TV revolution", + "Aerospace chiefs prepare for bumpy ride in recovery of long-haul flights", + "British companies look to muscle in on US retail investing boom", + "Libor to take firm step towards oblivion on New Year's Day", + "Audit profession unattractive to new recruits, says PwC boss", + "Chinese social media users blast Elon Musk over near miss in space", + "Companies raise over $12tn in 'blockbuster' year for global capital markets", + "The three questions that dominate investment", + "Brussels urges Chile's incoming president to endorse EU trade deal", +]; +*/ + /* Imagine you are working on the Financial Times web site! They have a list of article titles stored in an array. @@ -5,99 +19,157 @@ Implement the function below, which will return a new array containing only article titles which will fit. */ function potentialHeadlines(allArticleTitles) { - // TODO - //could potentislly use arr.filter(word => word.length <= 65) - + let newHeadLine = allArticleTitles.filter((el) => { + return el.length <= 65; + }); + return newHeadLine; + // TODO + //could potentislly use arr.filter(word => word.length <= 65) } - +/* +let test = potentialHeadlines(ARTICLE_TITLES); +test.map((el) => el.length); +console.log(test[3].length); +console.log(test.map((el) => el.length)); +*/ +//test.map((el)=> el.length); /* The editor of the FT likes short headlines with only a few words! Implement the function below, which returns the title with the fewest words. (you can assume words will always be seperated by a space) */ function titleWithFewestWords(allArticleTitles) { - // TODO - //arr.sort(compare) use coompare function with array.lenthe - //to get arr.length split sting at space (" "), - - //function compare(a,b){ + //regex.match, and go with the fewest empty spaces + let newArr = allArticleTitles.map((el) => el.split(" ")); + let neSort = newArr.sort((a, b) => a.length - b.length); + console.log(neSort); + return neSort[0].join(" "); + // TODO + //arr.sort(compare) use coompare function with array.lenthe + //to get arr.length split sting at space (" "), + //function compare(a,b){ // if(a.length > b.length){ - // return -1} -// if(a.length < b.length){} - -//return 0 -//} - - //could potentislly use arr.filter(word => word.length > 6); // sort better fit + // return -1} + // if(a.length < b.length){} + //return 0 + //} + //could potentislly use arr.filter(word => word.length > 6); // sort better fit } - +//let test2 = titleWithFewestWords(ARTICLE_TITLES); +//console.log(test2); /* The editor of the FT has realised that headlines which have numbers in them get more clicks! Implement the function below to return a new array containing all the headlines which contain a number. (Hint: remember that you can also loop through the characters of a string if you need to) -*/ + */ function headlinesWithNumbers(allArticleTitles) { - // TODO - //arr.filter((e) => {e.match(/{d}+/g !!== true }) // need to check syntax -//}) use a regex function to macht for a number if return true should pass filter + // TODO + let newArr = allArticleTitles.filter((el) => { + //console.log(el); + let found2 = /\d+/.test(el); + //let regex = /[0-9]/g; + //let found = el.match(regex).length > 0; + //return el.match(/[0-9]/g).length < 0; + return found2; + }); + //console.log(newArr); + //arr.filter((e) => {e.match(/{d}+/g !!== true }) // need to check syntax + //}) use a regex function to macht for a number if return true should pass filter + //return found; + return newArr; } +/* +function headlinesWithNumbers(allArticleTitles) { + // TODO + let newArr = allArticleTitles.filter((el) => { + console.log(el); + //result = el. + let re = el.split(); + let found = re.map((elem)=> { + if( Number(elem) === elem){ + return elem + } + }); + //return el.match(/[0-9]/g).length < 0; + return found; + }); + console.log(newArr); + //arr.filter((e) => {e.match(/{d}+/g !!== true }) // need to check syntax + //}) use a regex function to macht for a number if return true should pass filter + //return found; + return newArr; + } + */ +//let test3 = headlinesWithNumbers(ARTICLE_TITLES); +//console.log(test3); /* The Financial Times wants to understand what the average number of characters in an article title is. Implement the function below to return this number - rounded to the nearest integer. */ function averageNumberOfCharacters(allArticleTitles) { - // TODO - //split the string into an array with .split() - // can .join() and split agin or use regex to replace white space with empty string - /// could potentialy use regex to match all the characteres /[a-z]+[0-9]+gi/ need to check syntax - /// if can match all infividual caharacters you can use the number to get the average - //use the arr.reduce( fill with syntax) - //divide return value from reduce by array.length (note would need to factor in white space in count unless included in characters)to get the average + // TODO + //split the string into an array with .split() + let newArr = allArticleTitles.map((el) => el.length); + console.log(newArr); + let test = newArr.reduce((accumulator, currentValue) => accumulator + currentValue, 0); + console.log(test); + // can .join() and split agin or use regex to replace white space with empty string + /// could potentialy use regex to match all the characteres /[a-z]+[0-9]+gi/ need to check syntax + /// if can match all infividual caharacters you can use the number to get the average + //use the arr.reduce( fill with syntax) + //divide return value from reduce by array.length (note would need to factor in white space in count unless included in characters)to get the average + return Math.round(test / newArr.length); } - - - +//averageNumberOfCharacters(ARTICLE_TITLES); +//let test5 = averageNumberOfCharacters(ARTICLE_TITLES2); +//console.log(test5); /* ======= List of Articles - DO NOT MODIFY ===== */ const ARTICLE_TITLES = [ - "Streaming wars drive media groups to spend more than $100bn on new content", - "Amazon Prime Video India country head: streaming is driving a TV revolution", - "Aerospace chiefs prepare for bumpy ride in recovery of long-haul flights", - "British companies look to muscle in on US retail investing boom", - "Libor to take firm step towards oblivion on New Year's Day", - "Audit profession unattractive to new recruits, says PwC boss", - "Chinese social media users blast Elon Musk over near miss in space", - "Companies raise over $12tn in 'blockbuster' year for global capital markets", - "The three questions that dominate investment", - "Brussels urges Chile's incoming president to endorse EU trade deal", + "Streaming wars drive media groups to spend more than $100bn on new content", + "Amazon Prime Video India country head: streaming is driving a TV revolution", + "Aerospace chiefs prepare for bumpy ride in recovery of long-haul flights", + "British companies look to muscle in on US retail investing boom", + "Libor to take firm step towards oblivion on New Year's Day", + "Audit profession unattractive to new recruits, says PwC boss", + "Chinese social media users blast Elon Musk over near miss in space", + "Companies raise over $12tn in 'blockbuster' year for global capital markets", + "The three questions that dominate investment", + "Brussels urges Chile's incoming president to endorse EU trade deal", ]; /* ======= TESTS - DO NOT MODIFY ===== */ test("should only return potential headlines", () => { - expect(new Set(potentialHeadlines(ARTICLE_TITLES))).toEqual(new Set([ - "British companies look to muscle in on US retail investing boom", - "Libor to take firm step towards oblivion on New Year's Day", - "Audit profession unattractive to new recruits, says PwC boss", - "The three questions that dominate investment" - ])); + expect(new Set(potentialHeadlines(ARTICLE_TITLES))).toEqual( + new Set([ + "British companies look to muscle in on US retail investing boom", + "Libor to take firm step towards oblivion on New Year's Day", + "Audit profession unattractive to new recruits, says PwC boss", + "The three questions that dominate investment", + ]) + ); }); test("should return an empty array for empty input", () => { - expect(potentialHeadlines([])).toEqual([]); + expect(potentialHeadlines([])).toEqual([]); }); test("should return the title with the fewest words", () => { - expect(titleWithFewestWords(ARTICLE_TITLES)).toEqual("The three questions that dominate investment"); + expect(titleWithFewestWords(ARTICLE_TITLES)).toEqual( + "The three questions that dominate investment" + ); }); test("should only return headlines containing numbers", () => { - expect(new Set(headlinesWithNumbers(ARTICLE_TITLES))).toEqual(new Set([ - "Streaming wars drive media groups to spend more than $100bn on new content", - "Companies raise over $12tn in 'blockbuster' year for global capital markets" - ])); + expect(new Set(headlinesWithNumbers(ARTICLE_TITLES))).toEqual( + new Set([ + "Streaming wars drive media groups to spend more than $100bn on new content", + "Companies raise over $12tn in 'blockbuster' year for global capital markets", + ]) + ); }); test("should return the average number of characters in a headline", () => { - expect(averageNumberOfCharacters(ARTICLE_TITLES)).toEqual(65); + expect(averageNumberOfCharacters(ARTICLE_TITLES)).toEqual(65); }); diff --git a/2-mandatory/4-stocks.js b/2-mandatory/4-stocks.js index 72d62f94..c8e29f0f 100644 --- a/2-mandatory/4-stocks.js +++ b/2-mandatory/4-stocks.js @@ -11,11 +11,11 @@ const STOCKS = ["aapl", "msft", "amzn", "googl", "tsla"]; const CLOSING_PRICES_LAST_5_DAYS_FOR_ALL_STOCKS = [ - [179.19, 180.33, 176.28, 175.64, 172.99], // AAPL - [340.69, 342.45, 334.69, 333.20, 327.29], // MSFT - [3384.44, 3393.39, 3421.37, 3420.74, 3408.34], // AMZN - [2951.88, 2958.13, 2938.33, 2928.30, 2869.45], // GOOGL - [1101.30, 1093.94, 1067.00, 1008.87, 938.53] // TSLA + [179.19, 180.33, 176.28, 175.64, 172.99], // AAPL + [340.69, 342.45, 334.69, 333.2, 327.29], // MSFT + [3384.44, 3393.39, 3421.37, 3420.74, 3408.34], // AMZN + [2951.88, 2958.13, 2938.33, 2928.3, 2869.45], // GOOGL + [1101.3, 1093.94, 1067.0, 1008.87, 938.53], // TSLA ]; /* @@ -33,10 +33,32 @@ const CLOSING_PRICES_LAST_5_DAYS_FOR_ALL_STOCKS = [ Solve the smaller problems, and then build those solutions back up to solve the larger problem. Functions can help with this! */ +// function getAveragePrices(closingPricesForAllStocks) { +// // TODO +// closingPricesForAllStocks.map((el) => { +// let arrSum = el.reduce((total, current) => { +// return total + current, 0; +// }); +// console.log(arrSum); +// let arrAverage = arrSum / el.length; +// console.log(arrAverage); +// return arrAverage; +// }); +// } function getAveragePrices(closingPricesForAllStocks) { - // TODO + // TODO + let closeArr = closingPricesForAllStocks.map((el) => { + let arrSum = el.reduce((total, current) => { + return total + current; + }); + console.log(arrSum); + let arrAverage = arrSum / el.length; + console.log(el.length); + console.log(arrAverage); + return arrAverage.toFixed(2) * 1; + }); + return closeArr; } - /* We also want to see what the change in price is from the first day to the last day for each stock. Implement the below function, which @@ -47,8 +69,24 @@ function getAveragePrices(closingPricesForAllStocks) { (Apple's price on the 5th day) - (Apple's price on the 1st day) = 172.99 - 179.19 = -6.2 The price change value should be rounded to 2 decimal places, and should be a number (not a string) */ + +function calculateChange(arrOfStock) { + let sChange = arrOfStock[arrOfStock.length - 1] - arrOfStock[0]; + return sChange.toFixed(2); +} function getPriceChanges(closingPricesForAllStocks) { - // TODO + // TODO + let closingPrice = closingPricesForAllStocks; + let changes = []; + for (let stock of closingPrice) { + //console.log(stock); + + //calculate change in price for the array + let change = calculateChange(stock); + //add that value to the changes array + changes.push(+change); + } + return changes; } /* @@ -63,32 +101,58 @@ function getPriceChanges(closingPricesForAllStocks) { The stock ticker should be capitalised. The price should be shown with exactly 2 decimal places. */ +// function highestPriceDescriptions(closingPricesForAllStocks, stocks) { +// // TODO + +// //for every item in stocks return name plus highes item in CS +// let testArr = stocks.map(el => { +// let highest = closingPricesForAllStocks.map(ell => { +// let high = Math.max.apply(null, ell); +// //let high = el.sort((a, b) => a - b) +// return high; +// }) +// return `${el.toUpperCase()} and ${highest}` +// }) +// } function highestPriceDescriptions(closingPricesForAllStocks, stocks) { - // TODO -} + // TODO + let testArr2 = []; + for (let i = 0; i < stocks.length; i++) { + //for every item in stocks return name plus highes item in CS + let testArr = stocks[i]; + let fiveDayStock = closingPricesForAllStocks[i]; + let high = Math.max.apply(null, fiveDayStock); + //let high = el.sort((a, b) => a - b) + //return `${el.toUpperCase()} and ${highest[i]}` + testArr2.push( + `The highest price of ${testArr.toUpperCase()} in the last 5 days was ${high.toFixed(2)}` + ); + } + + //return testArr; + return testArr2; +} /* ======= TESTS - DO NOT MODIFY ===== */ test("should return the average price for each stock", () => { - expect(getAveragePrices(CLOSING_PRICES_LAST_5_DAYS_FOR_ALL_STOCKS)).toEqual( - [176.89, 335.66, 3405.66, 2929.22, 1041.93] - ); + expect(getAveragePrices(CLOSING_PRICES_LAST_5_DAYS_FOR_ALL_STOCKS)).toEqual([ + 176.89, 335.66, 3405.66, 2929.22, 1041.93, + ]); }); test("should return the price change for each stock", () => { - expect(getPriceChanges(CLOSING_PRICES_LAST_5_DAYS_FOR_ALL_STOCKS)).toEqual( - [-6.2, -13.4, 23.9, -82.43, -162.77] - ); + expect(getPriceChanges(CLOSING_PRICES_LAST_5_DAYS_FOR_ALL_STOCKS)).toEqual([ + -6.2, -13.4, 23.9, -82.43, -162.77, + ]); }); test("should return a description of the highest price for each stock", () => { - expect(highestPriceDescriptions(CLOSING_PRICES_LAST_5_DAYS_FOR_ALL_STOCKS, STOCKS)).toEqual( - [ - "The highest price of AAPL in the last 5 days was 180.33", - "The highest price of MSFT in the last 5 days was 342.45", - "The highest price of AMZN in the last 5 days was 3421.37", - "The highest price of GOOGL in the last 5 days was 2958.13", - "The highest price of TSLA in the last 5 days was 1101.30" - ] - ); + expect(highestPriceDescriptions(CLOSING_PRICES_LAST_5_DAYS_FOR_ALL_STOCKS, STOCKS)).toEqual([ + "The highest price of AAPL in the last 5 days was 180.33", + "The highest price of MSFT in the last 5 days was 342.45", + "The highest price of AMZN in the last 5 days was 3421.37", + "The highest price of GOOGL in the last 5 days was 2958.13", + "The highest price of TSLA in the last 5 days was 1101.30", + ]); }); diff --git a/3-extra/1-factorial.js b/3-extra/1-factorial.js index e1ebf8fb..ec4c8f2d 100644 --- a/3-extra/1-factorial.js +++ b/3-extra/1-factorial.js @@ -7,7 +7,7 @@ Using a loop, complete the function below so it returns the factorial of the number being passed in. */ - +/* function factorial(input) { // TODO let count = 0; @@ -16,32 +16,33 @@ function factorial(input) { } return count; } +*/ function factorial(input) { - // TODO - let count = 1; - for (let i = input; i > 0; i--){ - //reduce i by 1 till it is 1 - //1 * a number is 1 - console.log(i) - //tiems count by i and asign to count - count *= i; - console.log(count) - } - //exit loop when i is 1 - return count; + // TODO + let count = 1; + for (let i = input; i > 0; i--) { + //reduce i by 1 till it is 1 + //1 * a number is 1 + //console.log(i) + //tiems count by i and asign to count + count *= i; + //console.log(count) + } + //exit loop when i is 1 + return count; } -console.log(factorial(5)); +//console.log(factorial(5)); /* ======= TESTS - DO NOT MODIFY ===== */ test("3! should be 6", () => { - expect(factorial(3)).toEqual(6); + expect(factorial(3)).toEqual(6); }); test("5! should be 120", () => { - expect(factorial(5)).toEqual(120); + expect(factorial(5)).toEqual(120); }); test("10! should be 3628800", () => { - expect(factorial(10)).toEqual(3628800); + expect(factorial(10)).toEqual(3628800); }); diff --git a/3-extra/2-array-of-objects.js b/3-extra/2-array-of-objects.js index 8dd197c3..d38801d3 100644 --- a/3-extra/2-array-of-objects.js +++ b/3-extra/2-array-of-objects.js @@ -9,21 +9,26 @@ Implement a function which takes the array of books as a parameter, and returns an array of book titles. Each title in the resulting array should be the highest rated book in its genre. */ +/* +//question on why sort worked backward here? +*/ /* function getHighestRatedInEachGenre(books) { - // TODO - //sort the books array by the object keys - let newArr = [...books].sort((a, b) => a.rating - b.rating); - //sort highest to lowest // access and return the 1st index of the array - //loop over the books object - // - return newArr.map((e) => e.title) + // TODO + //sort the books array by the object keys + let newArr = [...books].sort((a, b) => a.rating - b.rating); + //sort highest to lowest // access and return the 1st index of the array + //loop over the books object + // + return newArr.map((e) => e.title); } +*/ + function compare(a, b) { - if (a.rating > b.rating) { + if (a.rating > b.rating) { return -1; } - if (a.rating < b.rating ) { + if (a.rating < b.rating) { return 1; } // a must be equal to b @@ -33,82 +38,88 @@ function compare(a, b) { function getHighestRatedInEachGenre(items) { //console.log(items); //let arr = [...items]; creates shallow copy - - // TODO - //sort the books array by the object keys - let qnewArr = [...items].sort(compare); - //without providing a compare funtion sort() sorts the items in the wrong order + + // TODO + //sort the books array by the object keys + let qnewArr = [...items].sort(compare); + //without providing a compare funtion sort() sorts the items in the wrong order // let qnewArr = items.sort((a, b) => a.rating - b.rating); //console.log(qnewArr); - //sort highest to lowest // access and return the 1st index of the array - //loop over the books object to and return tiltes - // + //sort highest to lowest // access and return the 1st index of the array + //loop over the books object to and return tiltes + // let test = qnewArr.map((e) => e.title); - return test + return test; } - +/* +note , need to filter by gener +array push if it meets an if cndition +push to three seperatat arrays +run sort on each array +push array[0] to a seperate array +return the array +*/ /* ======= Book data - DO NOT MODIFY ===== */ const BOOKS = [ - { - title: "The Lion, the Witch and the Wardrobe", - genre: "children", - rating: 4.7 - }, - { - title: "Sapiens: A Brief History of Humankind", - genre: "non-fiction", - rating: 4.7 - }, - { - title: "Nadiya's Fast Flavours", - genre: "cooking", - rating: 4.7 - }, - { - title: "Harry Potter and the Philosopher's Stone", - genre: "children", - rating: 4.8 - }, - { - title: "A Life on Our Planet", - genre: "non-fiction", - rating: 4.8 - }, - { - title: "Dishoom: The first ever cookbook from the much-loved Indian restaurant", - genre: "cooking", - rating: 4.85 - }, - { - title: "Gangsta Granny Strikes Again!", - genre: "children", - rating: 4.9 - }, - { - title: "Diary of a Wimpy Kid", - genre: "children", - rating: 4.6 - }, - { - title: "BOSH!: Simple recipes. Unbelievable results. All plants.", - genre: "cooking", - rating: 4.6 - }, - { - title: "The Book Your Dog Wishes You Would Read", - genre: "non-fiction", - rating: 4.85 - }, -] - + { + title: "The Lion, the Witch and the Wardrobe", + genre: "children", + rating: 4.7, + }, + { + title: "Sapiens: A Brief History of Humankind", + genre: "non-fiction", + rating: 4.7, + }, + { + title: "Nadiya's Fast Flavours", + genre: "cooking", + rating: 4.7, + }, + { + title: "Harry Potter and the Philosopher's Stone", + genre: "children", + rating: 4.8, + }, + { + title: "A Life on Our Planet", + genre: "non-fiction", + rating: 4.8, + }, + { + title: "Dishoom: The first ever cookbook from the much-loved Indian restaurant", + genre: "cooking", + rating: 4.85, + }, + { + title: "Gangsta Granny Strikes Again!", + genre: "children", + rating: 4.9, + }, + { + title: "Diary of a Wimpy Kid", + genre: "children", + rating: 4.6, + }, + { + title: "BOSH!: Simple recipes. Unbelievable results. All plants.", + genre: "cooking", + rating: 4.6, + }, + { + title: "The Book Your Dog Wishes You Would Read", + genre: "non-fiction", + rating: 4.85, + }, +]; /* ======= TESTS - DO NOT MODIFY ===== */ test("should return the highest rated book in each genre", () => { - expect(new Set(getHighestRatedInEachGenre(BOOKS))).toEqual(new Set( - [ - "The Book Your Dog Wishes You Would Read", - "Gangsta Granny Strikes Again!", - "Dishoom: The first ever cookbook from the much-loved Indian restaurant" - ] - )); + expect(new Set(getHighestRatedInEachGenre(BOOKS))).toEqual( + new Set([ + "The Book Your Dog Wishes You Would Read", + "Gangsta Granny Strikes Again!", + "Dishoom: The first ever cookbook from the much-loved Indian restaurant", + ]) + ); }); From c308a11f0616a22250c950b943b6fe3813a2fc8c Mon Sep 17 00:00:00 2001 From: OlushoreOdude <108965036+OlushoreOdude@users.noreply.github.com> Date: Thu, 15 Dec 2022 23:53:26 +0000 Subject: [PATCH 11/11] removed explanations --- 2-mandatory/4-stocks.js | 34 ++-------------------------------- 3-extra/1-factorial.js | 19 ++----------------- 3-extra/2-array-of-objects.js | 33 ++++----------------------------- 3 files changed, 8 insertions(+), 78 deletions(-) diff --git a/2-mandatory/4-stocks.js b/2-mandatory/4-stocks.js index c8e29f0f..242ee5a8 100644 --- a/2-mandatory/4-stocks.js +++ b/2-mandatory/4-stocks.js @@ -33,18 +33,7 @@ const CLOSING_PRICES_LAST_5_DAYS_FOR_ALL_STOCKS = [ Solve the smaller problems, and then build those solutions back up to solve the larger problem. Functions can help with this! */ -// function getAveragePrices(closingPricesForAllStocks) { -// // TODO -// closingPricesForAllStocks.map((el) => { -// let arrSum = el.reduce((total, current) => { -// return total + current, 0; -// }); -// console.log(arrSum); -// let arrAverage = arrSum / el.length; -// console.log(arrAverage); -// return arrAverage; -// }); -// } + function getAveragePrices(closingPricesForAllStocks) { // TODO let closeArr = closingPricesForAllStocks.map((el) => { @@ -79,11 +68,8 @@ function getPriceChanges(closingPricesForAllStocks) { let closingPrice = closingPricesForAllStocks; let changes = []; for (let stock of closingPrice) { - //console.log(stock); - - //calculate change in price for the array let change = calculateChange(stock); - //add that value to the changes array + changes.push(+change); } return changes; @@ -101,36 +87,20 @@ function getPriceChanges(closingPricesForAllStocks) { The stock ticker should be capitalised. The price should be shown with exactly 2 decimal places. */ -// function highestPriceDescriptions(closingPricesForAllStocks, stocks) { -// // TODO -// //for every item in stocks return name plus highes item in CS -// let testArr = stocks.map(el => { -// let highest = closingPricesForAllStocks.map(ell => { -// let high = Math.max.apply(null, ell); -// //let high = el.sort((a, b) => a - b) -// return high; -// }) -// return `${el.toUpperCase()} and ${highest}` -// }) -// } function highestPriceDescriptions(closingPricesForAllStocks, stocks) { // TODO let testArr2 = []; for (let i = 0; i < stocks.length; i++) { - //for every item in stocks return name plus highes item in CS let testArr = stocks[i]; let fiveDayStock = closingPricesForAllStocks[i]; let high = Math.max.apply(null, fiveDayStock); - //let high = el.sort((a, b) => a - b) - //return `${el.toUpperCase()} and ${highest[i]}` testArr2.push( `The highest price of ${testArr.toUpperCase()} in the last 5 days was ${high.toFixed(2)}` ); } - //return testArr; return testArr2; } diff --git a/3-extra/1-factorial.js b/3-extra/1-factorial.js index ec4c8f2d..8feeb25b 100644 --- a/3-extra/1-factorial.js +++ b/3-extra/1-factorial.js @@ -7,32 +7,17 @@ Using a loop, complete the function below so it returns the factorial of the number being passed in. */ -/* -function factorial(input) { - // TODO - let count = 0; - for (let i = 0; i >= input; i--){ - count = i *= i; - } - return count; -} -*/ + function factorial(input) { // TODO let count = 1; for (let i = input; i > 0; i--) { - //reduce i by 1 till it is 1 - //1 * a number is 1 - //console.log(i) - //tiems count by i and asign to count count *= i; - //console.log(count) } - //exit loop when i is 1 + return count; } -//console.log(factorial(5)); /* ======= TESTS - DO NOT MODIFY ===== */ test("3! should be 6", () => { diff --git a/3-extra/2-array-of-objects.js b/3-extra/2-array-of-objects.js index d38801d3..ad1dced4 100644 --- a/3-extra/2-array-of-objects.js +++ b/3-extra/2-array-of-objects.js @@ -12,16 +12,6 @@ /* //question on why sort worked backward here? -*/ /* -function getHighestRatedInEachGenre(books) { - // TODO - //sort the books array by the object keys - let newArr = [...books].sort((a, b) => a.rating - b.rating); - //sort highest to lowest // access and return the 1st index of the array - //loop over the books object - // - return newArr.map((e) => e.title); -} */ function compare(a, b) { @@ -31,34 +21,19 @@ function compare(a, b) { if (a.rating < b.rating) { return 1; } - // a must be equal to b + return 0; } function getHighestRatedInEachGenre(items) { - //console.log(items); - //let arr = [...items]; creates shallow copy - // TODO - //sort the books array by the object keys + let qnewArr = [...items].sort(compare); - //without providing a compare funtion sort() sorts the items in the wrong order - // let qnewArr = items.sort((a, b) => a.rating - b.rating); - //console.log(qnewArr); - //sort highest to lowest // access and return the 1st index of the array - //loop over the books object to and return tiltes - // + let test = qnewArr.map((e) => e.title); return test; } -/* -note , need to filter by gener -array push if it meets an if cndition -push to three seperatat arrays -run sort on each array -push array[0] to a seperate array -return the array -*/ + /* ======= Book data - DO NOT MODIFY ===== */ const BOOKS = [ {