Advertisement
dddilian

03. Plant Discovery - FINAL EXAM Обекти в главен обект

Aug 9th, 2020 (edited)
1,955
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function solve(inputArr) { //трябва да се провери в джъдж
  2.     let plantsObj = {};
  3.     let n = Number(inputArr.shift());
  4.  
  5.     for (let i = 0; i < inputArr.length; i++) {
  6.  
  7.         if (i < n) { //On the next n lines, you will be given some information about the plants that you have discovered in the format: "{plant}<->{rarity}"
  8.             let tokens = inputArr[i].split("<->");
  9.             let name = tokens[0];
  10.             let rarity = Number(tokens[1]);
  11.  
  12.  
  13.  
  14.             if (plantsObj.hasOwnProperty(name)) { //ако има такова цвете с такова име в обекта с цветя - ъпдейтваме неговото rarity или if(plants[name]){}
  15.                 plantsObj[name].rarity = rarity;
  16.             } else { //ако няма такова цвете - създаваме го
  17.                 plantsObj[name] = {
  18.                     rarity: rarity,
  19.                     ratings: [],
  20.                     avgRating: 0,
  21.                 }
  22.  
  23.             }
  24.  
  25.         } else { //After that until you receive the command "Exhibition" you will be given some of these commands:
  26.  
  27.             if (inputArr[i] == "Exhibition") {
  28.  
  29.                 for (const plantName of Object.keys(plantsObj)) { //определяме средния рейтинг на всяко растение, обхождайки всички цветя
  30.                     if (plantsObj[plantName].ratings.length < 1) { //ако масива с рейтинги на текущото цвете е празен - средния рейтинг ще му е нула
  31.                         plantsObj[plantName].avgRating = 0;
  32.                     } else {
  33.                         plantsObj[plantName].avgRating = plantsObj[plantName].ratings.reduce((a, b) => a + b, 0) / plantsObj[plantName].ratings.length; //събираме всичките му рейтинги,чрез метода reduce() и ги делим на дължината на масива с рейтинги на цветето
  34.                     } //дригят вариант е просто с още един цикъл да се обходи масива с рейтинги, да се намери сбора им и да се раздели на дължината на масива, за да се намери средната стойност
  35.                 }
  36.  
  37.                 //правим масив от ключовете/пропъртитата/т.е. имената на цветята и после по името ги намираме в обекта, за да сортираме масива по желаните стойности
  38.                 let plantsArr = Object.keys(plantsObj).sort((a, b) => plantsObj[b].rarity - plantsObj[a].rarity || plantsObj[b].avgRating - plantsObj[a].avgRating); //сортиране по низходящ ред първо по rarity, после по среден рейтинг
  39.  
  40.                 console.log("Plants for the exhibition:");
  41.                 for (const name of plantsArr) { //обхождаме вече сортирания масив с имена на цветя и по името им викаме стойностите на желаните value-та в обекта с цветя
  42.                     console.log(`- ${name}; Rarity: ${plantsObj[name].rarity}; Rating: ${plantsObj[name].avgRating.toFixed(2)}`)
  43.                 }
  44.  
  45.             } else {
  46.                 let tokens = inputArr[i].split(": ");
  47.                 let command = tokens[0];
  48.                 let nameAndParam = tokens[1].split(" - ");
  49.                 let name = nameAndParam[0];
  50.  
  51.  
  52.  
  53.                 if (plantsObj.hasOwnProperty(name)) { //ако има в обекта с цветя цвете с такова име(key)
  54.                     if (command == "Rate") {
  55.                         let rating = Number(nameAndParam[1]);
  56.                         plantsObj[name].ratings.push(rating);
  57.                     } else if (command == "Update") {
  58.                         let newRarity = Number(nameAndParam[1]);
  59.                         plantsObj[name].rarity = newRarity;
  60.                     } else if (command == "Reset") {
  61.                         plantsObj[name].ratings = [];
  62.                     } else { //значи командата не съществува
  63.                         console.log("error");
  64.                     }
  65.                 } else { //значи няма такова цвете
  66.                     console.log("error");
  67.                 }
  68.             }
  69.         }
  70.     }
  71. }
  72.  
  73. solve(["3", "Arnoldii<->4", "Woodii<->7", "Welwitschia<->2", "Rate: Woodii - 10", "Rate: Welwitschia - 7", "Rate: Arnoldii - 3", "Rate: Woodii - 5", "Update: Woodii - 5", "Reset: Arnoldii", "Exhibition"]);
  74. console.log();
  75. solve(["2", "Candelabra<->10", "Oahu<->10", "Rate: Oahu - 7", "Rate: Candelabra - 6", "Exhibition"]);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement