Advertisement
petarm10

SPARK

Feb 28th, 2020
171
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 24.65 KB | None | 0 0
  1. // 1. Napišite funkciju za asinkroni dohvat podataka sa servera.
  2. // Dohvatite JSON sa linka: https://api.myjson.com/bins/17uckw - 5 bodova
  3.  
  4. // 2. Napravite funkciju koja prima podatke koje ste dohvatili sa servera.
  5. // Funkcija treba sortirati dobijene podatke ("matches") po id-u, od najveæeg id-a prema najmanjem i ispisati tekst, nakon sortiranja, (za svaki podatak) u obliku "id - par" ("par" se nalazi u propertiju duels) - 10 bodova
  6.  
  7. // 3. Napravite novu funkciju koja prima podatke koje ste dohvatili sa servera.
  8. // Funkcija treba izbaciti najduzi i najkraci mec iz niza matches gledajuci "matchTime" property te ispisati niz(format matchTime-a je h:mm). - 15 bodova
  9.  
  10. // 4. Napraviti funkciju koja æe sumirati broj gemova u svakom meèu, te ispisati koji meè ima najviše gemova i broj gemova na tom meèu - 20 bodova
  11.  
  12. // 5. Napraviti funkciju koja æe iz matchStartsAt propertija izvuæi datum poèetka meèa te ispisati za svaki meè na koji je dan u tjednu poèeo. Zatim ispisati dane koji se ponavljaju više od jednog puta i napisati koliko se puta ponavljaju ti dani("dan" - "broj ponavljanja"). - 25 bodova
  13.  
  14. // Zadatak 6.: Koristeæi se HTML-om i CSS-om, napravite div element sirine 200px i visine 200px sive pozadine.
  15. // Na klik diva cete zakacit funkciju za dohvatanje podataka sa servera kojoj cete proslijediti novu funkciju koja ce na svaki klik uzeti neki random mec iz niza matches i promijeniti pozadinu div-u po "courtType" property-u iz tog meca ("#40A14C" za grass, "#005282" za "hard court" i "#E2983D" za clay) i upisati ime tog meca unutar diva. (25 bodova)
  16.  
  17. function loadData(url, cb) {
  18. var xmlhttp = new XMLHttpRequest();
  19. xmlhttp.onreadystatechange = function() {
  20. if (this.readyState == 4 && this.status == 200) {
  21. cb(JSON.parse(this.responseText));
  22. }
  23. };
  24. xmlhttp.open("GET", url, true);
  25. xmlhttp.send();
  26. }
  27.  
  28. function parseData(data){
  29. //sortMatches(data);
  30. //matchLength(data);
  31. //gemsNum(data);
  32. //matchStart(data);
  33. }
  34.  
  35. loadData("https://api.myjson.com/bins/17uckw", parseData);
  36.  
  37. function sortMatches(data){
  38. data.matches.sort((a,b) => b.id - a.id);
  39.  
  40. data.matches.forEach((item) => {
  41. console.log(item.id + ' - ' + data.duels[item.id]);
  42. });
  43. }
  44.  
  45. function matchLength(data){
  46. data.matches.forEach(function(key){
  47. key.minutes = (parseInt(key.matchTime.split(':')[0])*60) + parseInt(key.matchTime.split(':')[1]);
  48. });
  49.  
  50. var min = Infinity, max = -Infinity, minEl, maxEl;
  51.  
  52. data.matches.forEach(function(key){
  53. var value = key.minutes;
  54. if(min > value){
  55. min = value;
  56. minEl = key;
  57. }
  58.  
  59. if(max < value){
  60. max = value;
  61. maxEl = key;
  62. }
  63. });
  64.  
  65. console.log(minEl);
  66. console.log(maxEl);
  67. }
  68.  
  69. function gemsNum(data){
  70. var games = {}, sumOfGames = 0;
  71. data.matches.forEach(function(key){
  72. sumOfGames = 0;
  73. key.result.sets.forEach(function(game){
  74. var x = parseInt(game.split(':')[0]) + parseInt(game.split(':')[1]);
  75. sumOfGames += x;
  76. });
  77. if(!games[key.id]) games[key.id] = sumOfGames;
  78. });
  79.  
  80. var max = -Infinity, maxEl = [], value;
  81.  
  82. Object.keys(games).forEach(key => {
  83. value = games[key];
  84. if(value > max){
  85. maxEl = [];
  86. max = value;
  87. maxEl.push(key + ': ' + data.duels[key] + ' sa ' + max + ' gemova\n');
  88. } else if(value === max){
  89. maxEl.push(key + ': ' + data.duels[key] + ' sa ' + max + ' gemova');
  90. }
  91. });
  92. console.log('Najveæi broj gemova: \n' + maxEl);
  93. }
  94.  
  95. function matchStart(data){
  96. var dayCount = {};
  97. data.matches.forEach(key => {
  98. var date = new Date(key.matchStartsAt).toLocaleString("hr-HR", {weekday: 'long'});
  99. console.log('Meè ' + data.duels[key.id] + ' je održan ' + date);
  100.  
  101. if(!dayCount[date]) dayCount[date] = 0;
  102. dayCount[date]++;
  103. });
  104.  
  105. console.log(dayCount);
  106. Object.keys(dayCount).forEach(key => {
  107. if(dayCount[key] > 1){
  108. console.log(key + ' se ponavlja ' + dayCount[key] + ' puta.');
  109. }
  110. });
  111. }
  112.  
  113. function load(data) {
  114. var randIndex = Math.floor(Math.random()*data.matches.length),
  115. x = data.matches[randIndex],
  116. grayDiv = document.querySelector('.box');
  117.  
  118. if(x.courtType === 'grass'){
  119. grayDiv.style.backgroundColor = '#40A14C';
  120. grayDiv.innerHTML = data.duels[x.id];
  121. }
  122. else if(x.courtType === 'hard court'){
  123. grayDiv.style.backgroundColor = '#005282';
  124. grayDiv.innerHTML = data.duels[x.id];
  125. }
  126. else if(x.courtType === 'clay'){
  127. grayDiv.style.backgroundColor = '#E2983D';
  128. grayDiv.innerHTML = data.duels[x.id];
  129. }
  130. }
  131.  
  132.  
  133. /////////////////////////////////////////////////////////////////////
  134. ////////////////////////////////////////////////////////////////////
  135.  
  136.  
  137. // Napomene: Vrijeme trajanja testa je 2 sata. Prolaz je 50%. Dopušteno je korištenje
  138. // interneta i materijala s predavanja, ali nije dopušten nikakav oblik varanja,
  139. // ukljuèujuæi prepisivanje od drugih. Varanje ili bilo kakav pokušaj varanja rezultirat
  140. // æe najstrožim sankcijama.
  141.  
  142. // Zadatak 1.: Pošaljite zahtjev i dohvatite JSON podatke o igricama s
  143. // http://output.jsbin.com/yoluyoqowa.json. Svaka igrica definirana je imenom (name),
  144. // rejtingom (rating), nizom platformi na kojima je igra dostupna (platforms) i datumom
  145. // objave igre (released, u formatu YYYY-mm-DD). Ukoliko ne uspijete, otvorite navedeni
  146. // URL i kopirajte podatke u varijablu data da možete nastaviti raditi (ali bez priznatih
  147. // bodova). (10 bodova)
  148.  
  149. // Zadatak 2.: Dinamièki pronaðite prosjeèan rejting igre i najrjeðe platforme za koju je
  150. // igra objavljena. (20 bodova)
  151.  
  152. // Zadatak 3.: Dinamièki provjerite koji se dani u tjednu puštanja igrice ponavljaju.
  153. // Koji je najèešæi mjesec puštanja igrice? (20 bodova)
  154.  
  155. // Zadatak 4.: Prebrojte sve samoglasnike u imenima igara. Koliko se puta javljaju dva
  156. // samoglasnika uzastopno? (15 bodova)
  157.  
  158. // Zadatak 5.: Napravite algoritam koji æe generirati špil karata i nasumièno ga
  159. // podijeliti na dva jednaka dijela, te izvuæi jednu kartu s vrha iz oba dijela
  160. // špila i odrediti koji dio ima veæu kartu. U sluèaju da je karta ista, izvlaèi
  161. // se nova sve dok jedan dio špila ne bude jaèi. As je najjaèa karta. (20 bodova)
  162.  
  163. // Zadatak 6.: Koristeæi se HTML-om i CSS-om, napravite vertikalno i horizontalno
  164. // centrirane, razlièito obojene kvadrate, bez korištenja tablica, koji prikazuju
  165. // ime i rejting igre. Animirajte im transparentnost tijekom 4s. (15 bodova)
  166.  
  167.  
  168. function loadData(url, cb) {
  169. var xmlhttp = new XMLHttpRequest();
  170. xmlhttp.onreadystatechange = function() {
  171. if (this.readyState == 4 && this.status == 200) {
  172. cb(JSON.parse(this.responseText));
  173. }
  174. };
  175. xmlhttp.open("GET", url, true);
  176. xmlhttp.send();
  177. }
  178.  
  179. function parseData(data) {
  180. //avgRating(data);
  181. //releaseDay(data);
  182. //vowelsCount(data);
  183. createDivs(data, randomColors);
  184. }
  185.  
  186. loadData("https://output.jsbin.com/yoluyoqowa.json", parseData);
  187.  
  188. function avgRating(data) {
  189. var sum = 0;
  190. var platforms = {};
  191. data.forEach(function(key) {
  192. sum += key.rating;
  193. key.platforms.forEach(function(item) {
  194. var x = item.toLowerCase();
  195. if (!platforms[x]) platforms[x] = 0;
  196. platforms[x]++;
  197. })
  198. });
  199.  
  200. var min = Infinity;
  201. var rarest = [];
  202. Object.keys(platforms).forEach(function(key) {
  203. var value = platforms[key];
  204. if (value < min) {
  205. min = value;
  206. rarest = [];
  207. rarest.push(key);
  208. } else if (value === min) {
  209. rarest.push(key);
  210. }
  211. });
  212.  
  213. console.log('Prosjeèni rating je: ' + sum / data.length);
  214. console.log('Najrjeðe platforme su: ' + rarest);
  215. }
  216.  
  217. function releaseDay(data) {
  218. var days = {};
  219. var months = {};
  220. var repeatDays = [];
  221. data.forEach(function(key) {
  222. var day = new Date(key.released).toLocaleString("hr-HR", {
  223. weekday: 'long'
  224. });
  225. var month = new Date(key.released).toLocaleString("hr-HR", {
  226. month: 'long'
  227. });
  228.  
  229. if (!days[day]) days[day] = 0;
  230. days[day]++;
  231.  
  232. if (days[day] > 1 && repeatDays.indexOf(day) === -1) {
  233. repeatDays.push(day);
  234. }
  235.  
  236. if (!months[month]) months[month] = 0;
  237. months[month]++;
  238. });
  239.  
  240. var max = -Infinity;
  241. var mostRepeated;
  242.  
  243. Object.keys(months).forEach(function(key) {
  244. var value = months[key];
  245.  
  246. if (value > max) {
  247. max = value;
  248. mostRepeated = key;
  249. }
  250. });
  251.  
  252. console.log('Dani koji se ponavljaju: ' + repeatDays);
  253. console.log('Najèešæi mjesec puštanja igre je: ' + mostRepeated)
  254. }
  255.  
  256. function vowelsCount(data) {
  257. var vowelsCount = 0,
  258. consecutive = 0,
  259. term = 0;
  260. data.forEach(function(key) {
  261. Array.from(key.name).forEach(function(item) {
  262. if ('aeiou'.includes(item.toLowerCase())) {
  263. vowelsCount++;
  264. term++
  265. } else {
  266. term = 0;
  267. }
  268. if (term > 1) {
  269. consecutive++;
  270. }
  271. });
  272. });
  273.  
  274. console.log('Broj samoglasnika u nazivu igrica ' + vowelsCount);
  275. console.log('Broj uzastopnih samoglasnika u nazivu igrica je ' + consecutive);
  276. }
  277.  
  278. function randomColors(){
  279. return '#' + ('000000' + ((Math.random()*16777215).toString(16))).slice(-6);
  280. }
  281.  
  282. function createDivs(data, callback) {
  283. const container = document.getElementById('card-container');
  284.  
  285. data.forEach((game) => {
  286. const content = `
  287. <div class="card">
  288. ${game.name} - ${game.rating}
  289. </div>
  290. `
  291. ;
  292. container.innerHTML += content;
  293. });
  294.  
  295. const cardList = document.querySelectorAll('.card');
  296. var color =
  297. for(let i = 0; i < cardList.length; i++){
  298. cardList[i].style.backgroundColor = callback();
  299. }
  300. }
  301.  
  302.  
  303. ////////////////////////////////////////////////////////////////////////
  304. ///////////////////////////////////////////////////////////////////////
  305.  
  306.  
  307. // FRONTEND 26.01.2017.
  308. // Ime i prezime: [UPISATI OVDJE]
  309.  
  310. // Zadatak 1.: Pošaljite zahtjev i dohvatite JSON podatke o tenisaèima s
  311. // https://api.myjson.com/bins/11m58t. Svaki tenisaè definiran je imenom (name), godinama (age),
  312. // rejtingom (rating), najdražim podlogama (favouriteCourtType) i datumom
  313. // kad se poèeo bavit tenisom profesionalno (turnedPro, u formatu YYYY-mm-DD). Ukoliko ne uspijete, otvorite navedeni
  314. // URL i kopirajte podatke u varijablu data da možete nastaviti raditi (ali bez priznatih
  315. // bodova). (10 bodova)
  316.  
  317. // Zadatak 2.: Dinamièki pronaðite prosjeènu starost svih igraèa te je zaokružite na dvije decimale i ispišite. Zatim sortirajte igraèe po ratingu te ih ispišite nakon sortiranja (u obliku rating - name). (20 bodova)
  318.  
  319. // Zadatak 3.: Dinamièki provjerite koja je vrsta podloge najmanje omiljena meðu igraèima(Hard court, grass ili clay).
  320. // (25 bodova)
  321.  
  322. // Zadatak 4.: Dinamièki provjerite koji igraè ima najdužu profesionalnu karijeru. Ispišite koji je to igraè i koliko godina se profesionalno bavi tenisom. (15 bodova)
  323.  
  324. // Zadatak 5.: Prebrojte sve samoglasnike u imenima igraèa i ispišite koliko ih ima kod svakog igraèa. (15 bodova)
  325.  
  326. // Zadatak 6.: Koristeæi se HTML-om i CSS-om, napravite vertikalno i horizontalno
  327. // centrirane, razlièito obojene kvadrate, bez korištenja tablica, koji prikazuju
  328. // igraèa i njegov rating. Animirajte im transparentnost tijekom 2s. (15 bodova)
  329.  
  330. function loadData(url, cb) {
  331. var xmlhttp = new XMLHttpRequest();
  332. xmlhttp.onreadystatechange = function() {
  333. if (this.readyState == 4 && this.status == 200) {
  334. cb(JSON.parse(this.responseText));
  335. }
  336. };
  337. xmlhttp.open("GET", url, true);
  338. xmlhttp.send();
  339. }
  340.  
  341. function parseData(data) {
  342. console.log("\n2. zadatak:");
  343. getAvg(data);
  344. console.log("\n3. zadatak - Najmanje omiljena podloga meðu igraèima je:");
  345. atLeastFavorite(data);
  346. console.log("\n4. zadatak - Najdužu profesionalnu karijeru ima:");
  347. longestPro(data, dateDiffInDays);
  348. console.log("\n5. zadatak - Ispis broja samoglasnika u imenu kod svakog igraèa:");
  349. countVowels(data);
  350. createContainers(data, getRandomColor);
  351. }
  352.  
  353. loadData("https://api.myjson.com/bins/11m58t", parseData);
  354.  
  355. function getAvg(data) {
  356. var sum = 0;
  357. data.forEach(function(key) {
  358. sum += key.age;
  359. })
  360. console.log('Prosjek svih igraèa iznosi: ' + parseFloat(sum / data.length).toFixed(2));
  361.  
  362. data.sort((a, b) => a.rating - b.rating)
  363.  
  364. data.forEach(key => console.log(key.name + ' - ' + key.rating));
  365. }
  366.  
  367. function atLeastFavorite(data) {
  368. var court = {};
  369. data.forEach(function(key) {
  370. key.favouriteCourtType.forEach(function(type) {
  371. if (!court[type]) court[type] = 0;
  372. court[type]++
  373. })
  374. })
  375. var min = Infinity;
  376. var minEl;
  377. Object.keys(court).forEach(function(key) {
  378. var broj = court[key];
  379. if (broj < min) {
  380. min = court[key];
  381. minEl = key;
  382. }
  383. });
  384.  
  385. console.log(minEl);
  386. }
  387.  
  388. //razlika izmeðu dva datuma izražena u danima
  389. function dateDiffInDays(a, b) {
  390. const utc1 = Date.UTC(a.getFullYear(), a.getMonth(), a.getDate());
  391. const utc2 = Date.UTC(b.getFullYear(), b.getMonth(), b.getDate());
  392.  
  393. return Math.abs(Math.floor((utc2 - utc1) / (1000 * 60 * 60 * 24)));
  394. }
  395.  
  396. //prima data i dateDiffInDays()
  397. function longestPro(data, callback) {
  398. /*
  399. //stvara novi niz sa imenom i razlikom izmeðu današnjeg dana i
  400. // dana kada je igraè postao Pro pritom koristeæi dateDiffInDays koja vraæa
  401. // razliku izmeðu ta dva datuma u danima i postavlja to u property daysDiff
  402.  
  403. var proPeriod = [];
  404. var date1 = new Date();
  405. data.forEach(function(key){
  406. var date2 = new Date(key.turnedPro);
  407. proPeriod.push({
  408. name: key.name,
  409. daysDiff: callback(date2, date1)
  410. });
  411. })
  412. proPeriod.sort((a,b) => (a.daysDiff < b.daysDiff) ? 1 : ((a.daysDiff > b.daysDiff) ? -1 : 0));
  413. console.log(proPeriod[0].name + ' - ' + Math.floor(proPeriod[0].daysDiff/365)); */
  414. data.sort((a, b) => (a.turnedPro > b.turnedPro) ? 1 : ((a.turnedPro < b.turnedPro) ? -1 : 0));
  415. var d = new Date();
  416. console.log(data[0].name + ' - ' + (d.getFullYear() - data[0].turnedPro.split('-')[0]) + ' godina');
  417. }
  418.  
  419. function countVowels(data) {
  420. data.forEach(function(key) {
  421. var count = Array.from(key.name).filter(letter => 'AEIOUaeiou'.includes(letter)).length;
  422. console.log(key.name + ' ima ' + count + ' samoglasnika.');
  423. });
  424. }
  425.  
  426. //vraæa radnom boju koja se koristi za createContainers()
  427. function getRandomColor() {
  428. var color = '#' + ('00000' + (Math.random() * 16777215).toString(16)).slice(-6)
  429. return color;
  430. }
  431.  
  432. //prima data i funckiju getRandomColor() koja genereira random boju za background color kartica
  433. function createContainers(data, callback) {
  434. const container = document.getElementById('card-container');
  435.  
  436. data.forEach((player) => {
  437. const card = document.createElement('div');
  438. card.classList = 'card-body';
  439.  
  440. const content = `
  441. <div class="card">
  442. <div class="card-body">
  443.  
  444. <h5>${player.name} - ${player.rating}</h5>
  445.  
  446. </div>
  447. </div>
  448.  
  449. `;
  450. container.innerHTML += content;
  451. });
  452.  
  453. var cardList = document.querySelectorAll(".card");
  454.  
  455. for (var i = 0; i < cardList.length; i++) {
  456. cardList[i].style.backgroundColor = callback();
  457. }
  458. }
  459.  
  460.  
  461. //////////////////////////////////////////////////////////////////
  462. /////////////////////////////////////////////////////////////////
  463.  
  464.  
  465. // Ulazni test 21.2.2019.
  466. // Ime i prezime: [Ivan Ostojiæ]
  467. // Napomene: Vrijeme trajanja testa je 1 sat i 45 minuta. Prolaz je 50%. Dopušteno je korištenje
  468. // interneta i materijala s predavanja, ali nije dopušten nikakav oblik varanja,
  469. // ukljuèujuæi prepisivanje od drugih.
  470.  
  471.  
  472. // Zadatak 1.
  473. // Napraviti funkciju za dohvat podataka koja ima 2 parametra "url" i "callback".
  474. // Dohvatiti podatke sa https://api.myjson.com/bins/gnte0 i pozvati callback (fukcija za obradu podataka).
  475. // Ukoliko ne uspijete, otvorite navedeni URL i kopirajte podatke u varijablu data da možete nastaviti raditi.
  476. // (ali bez priznatih bodova). (5 bodova)
  477.  
  478.  
  479. // Zadatak 2.
  480. // Napraviti funkciju koja æe sortirati dobivene podatke ("songs") po id-u (od najveæeg id-a prema najmanjem) i nakon sortiranja
  481. // ispisati podatke u obliku "id - songName - artist" ("artist" se nalazi u property-ju "artists"). (10 bodova)
  482.  
  483.  
  484. // Zadatak 3.
  485. // Napraviti funkciju koja æe sortirati dobivene podatke ("songs") po "songLength" (format songLength-a je minutes:seconds),
  486. // sortirati od najduže pjesme prema najkraæoj i nakon sortiranja ispisati 3 najduže pjesme. (15 bodova)
  487.  
  488.  
  489. // Zadatak 4.
  490. // Napraviti funkciju koja provjerava koji se žanr glazbe najviše ponavlja meðu navedenim pjesmama i ako se ponavlja
  491. // u bar 3 pjesme, ispišite taj žanr. (25 bodova)
  492.  
  493.  
  494. // Zadatak 5.
  495. // Napraviti funkciju koja æe iz "debut" property-ja izvuæi datum objavljivanja pjesme te ispisati za svaku pjesmu
  496. // na koji je dan u tjednu izašla. Zatim ispisati dane koji se ponavljaju više od jednog puta i napisati
  497. // koliko se puta ponavljaju ti dani. (25 bodova)
  498.  
  499.  
  500. // Zadatak 6.
  501. // Napišite funkciju koja æe rekurzivno iz niza "songs" ispisati nazive svih pjesama (property "songName"). (20 bodova)
  502.  
  503. function loadData(url, callback) {
  504. var xhttp = new XMLHttpRequest();
  505. xhttp.onreadystatechange = function() {
  506. if (this.readyState == 4 && this.status == 200) {
  507. callback(JSON.parse(this.response))
  508. }
  509. };
  510. xhttp.open("GET", url, true);
  511. xhttp.send();
  512. }
  513.  
  514. let parseData = function (data){
  515. zadatak5(data.songs)
  516. }
  517.  
  518. let zadatak2 = function (data){
  519. let formatiraniJson = JSON.parse(JSON.stringify(data));
  520. // Bespotrebno u ovom slucaju ali sam mislio da cu ovu funkciju opet koristiti tj. return nesto pa nisam htio mijenjati originalni objekt
  521. let sortirane = formatiraniJson.songs.sort(function(a,b) {
  522. return b.id - a.id;
  523. });
  524. let pjesnici = Object.entries(formatiraniJson.artists)
  525. sortirane.forEach(function(item){
  526. item.song = pjesnici.find(el => el[0] == item.id)
  527. console.log(`${item.id} - ${item.songName} - ${item.song[1]}`)
  528. })
  529. }
  530.  
  531. let zadatak3 = function (data){
  532. data.forEach(function(item){
  533. let minute = parseInt(item.songLength)
  534. let sekunde = parseInt(item.songLength.slice(-2)) + minute*60
  535. item.duljinaPjesme = sekunde;
  536. })
  537. data.sort(function(a,b) {
  538. return b.duljinaPjesme - a.duljinaPjesme;
  539. });
  540. for (i=0; i<3; i++)
  541. console.log(data[i].songName)
  542. }
  543.  
  544. let zadatak4 = function (data){
  545. let genres = []
  546. data.forEach(item =>
  547. item.genre.forEach(it =>
  548. genres.push(it)
  549. ))
  550.  
  551. let counts = {};
  552. genres.forEach(function(x) { counts[x] = (counts[x] || 0)+1; });
  553. let repeatingSongs = (Object.entries(counts).filter(([key,value]) => value > 2))
  554. repeatingSongs.forEach(([key,value]) => console.log(key))
  555. }
  556.  
  557. let zadatak5 = function (data){
  558. let dani = [];
  559. data.forEach(function(item) {
  560. let dan = new Date(item.debut).toLocaleString('en-us', { weekday: 'long' })
  561. console.log(`${item.songName} - ${dan}`)
  562. dani.push(dan)
  563. })
  564. let counts = {};
  565. dani.forEach(function(x) { counts[x] = (counts[x] || 0)+1; });
  566. Object.entries(counts).forEach(([key,value]) => {
  567. if(value > 1) console.log(`${key} - ${value}`)
  568. })
  569. }
  570.  
  571. let zadatak6 = function (songs){
  572. if (songs.length == 0) return;
  573. else console.log(songs.shift().songName)
  574. zadatak6(songs)
  575. }
  576.  
  577.  
  578.  
  579. loadData("https://api.myjson.com/bins/gnte0", parseData)
  580.  
  581.  
  582. ////////////////////////////////////////////////////////////////////
  583. ///////////////////////////////////////////////////////////////////
  584.  
  585.  
  586. // FRONTEND 26.01.2017.
  587. // Ime i prezime: [UPISATI OVDJE]
  588.  
  589. // Zadatak 1.: Pošaljite zahtjev i dohvatite JSON podatke o tenisaèima s
  590. // https://api.myjson.com/bins/11m58t. Svaki tenisaè definiran je imenom (name), godinama (age),
  591. // rejtingom (rating), najdražim podlogama (favouriteCourtType) i datumom
  592. // kad se poèeo bavit tenisom profesionalno (turnedPro, u formatu YYYY-mm-DD). Ukoliko ne uspijete, otvorite navedeni
  593. // URL i kopirajte podatke u varijablu data da možete nastaviti raditi (ali bez priznatih
  594. // bodova). (10 bodova)
  595.  
  596. // Zadatak 2.: Dinamièki pronaðite prosjeènu starost svih igraèa te je zaokružite na dvije decimale i ispišite. Zatim sortirajte igraèe po ratingu te ih ispišite nakon sortiranja (u obliku rating - name). (20 bodova)
  597.  
  598. // Zadatak 3.: Dinamièki provjerite koja je vrsta podloge najmanje omiljena meðu igraèima(Hard court, grass ili clay).
  599. // (25 bodova)
  600.  
  601. // Zadatak 4.: Dinamièki provjerite koji igraè ima najdužu profesionalnu karijeru. Ispišite koji je to igraè i koliko godina se profesionalno bavi tenisom. (15 bodova)
  602.  
  603. // Zadatak 5.: Prebrojte sve samoglasnike u imenima igraèa i ispišite koliko ih ima kod svakog igraèa. (15 bodova)
  604.  
  605. // Zadatak 6.: Koristeæi se HTML-om i CSS-om, napravite vertikalno i horizontalno
  606. // centrirane, razlièito obojene kvadrate, bez korištenja tablica, koji prikazuju
  607. // igraèa i njegov rating. Animirajte im transparentnost tijekom 2s. (15 bodova)
  608.  
  609. function loadData(url, cb) {
  610. var xmlhttp = new XMLHttpRequest();
  611. xmlhttp.onreadystatechange = function() {
  612. if (this.readyState == 4 && this.status == 200) {
  613. cb(JSON.parse(this.responseText));
  614. }
  615. };
  616. xmlhttp.open("GET", url, true);
  617. xmlhttp.send();
  618. }
  619.  
  620. function parseData(data) {
  621. console.log("\n2. zadatak:");
  622. getAvg(data);
  623. console.log("\n3. zadatak - Najmanje omiljena podloga meðu igraèima je:");
  624. atLeastFavorite(data);
  625. console.log("\n4. zadatak - Najdužu profesionalnu karijeru ima:");
  626. longestPro(data, dateDiffInDays);
  627. console.log("\n5. zadatak - Ispis broja samoglasnika u imenu kod svakog igraèa:");
  628. countVowels(data);
  629. createContainers(data, getRandomColor);
  630. }
  631.  
  632. loadData("https://api.myjson.com/bins/11m58t", parseData);
  633.  
  634. function getAvg(data) {
  635. var sum = 0;
  636. data.forEach(function(key) {
  637. sum += key.age;
  638. })
  639. console.log('Prosjek svih igraèa iznosi: ' + parseFloat(sum / data.length).toFixed(2));
  640.  
  641. data.sort((a, b) => a.rating - b.rating)
  642.  
  643. data.forEach(key => console.log(key.name + ' - ' + key.rating));
  644. }
  645.  
  646. function atLeastFavorite(data) {
  647. var court = {};
  648. data.forEach(function(key) {
  649. key.favouriteCourtType.forEach(function(type) {
  650. if (!court[type]) court[type] = 0;
  651. court[type]++
  652. })
  653. })
  654. var min = Infinity;
  655. var minEl;
  656. Object.keys(court).forEach(function(key) {
  657. var broj = court[key];
  658. if (broj < min) {
  659. min = court[key];
  660. minEl = key;
  661. }
  662. });
  663.  
  664. console.log(minEl);
  665. }
  666.  
  667. //razlika izmeðu dva datuma izražena u danima
  668. function dateDiffInDays(a, b) {
  669. const utc1 = Date.UTC(a.getFullYear(), a.getMonth(), a.getDate());
  670. const utc2 = Date.UTC(b.getFullYear(), b.getMonth(), b.getDate());
  671.  
  672. return Math.abs(Math.floor((utc2 - utc1) / (1000 * 60 * 60 * 24)));
  673. }
  674.  
  675. //prima data i dateDiffInDays()
  676. function longestPro(data, callback) {
  677. /*
  678. //stvara novi niz sa imenom i razlikom izmeðu današnjeg dana i
  679. // dana kada je igraè postao Pro pritom koristeæi dateDiffInDays koja vraæa
  680. // razliku izmeðu ta dva datuma u danima i postavlja to u property daysDiff
  681.  
  682. var proPeriod = [];
  683. var date1 = new Date();
  684. data.forEach(function(key){
  685. var date2 = new Date(key.turnedPro);
  686. proPeriod.push({
  687. name: key.name,
  688. daysDiff: callback(date2, date1)
  689. });
  690. })
  691. proPeriod.sort((a,b) => (a.daysDiff < b.daysDiff) ? 1 : ((a.daysDiff > b.daysDiff) ? -1 : 0));
  692. console.log(proPeriod[0].name + ' - ' + Math.floor(proPeriod[0].daysDiff/365)); */
  693. data.sort((a, b) => (a.turnedPro > b.turnedPro) ? 1 : ((a.turnedPro < b.turnedPro) ? -1 : 0));
  694. var d = new Date();
  695. console.log(data[0].name + ' - ' + (d.getFullYear() - data[0].turnedPro.split('-')[0]) + ' godina');
  696. }
  697.  
  698. function countVowels(data) {
  699. data.forEach(function(key) {
  700. var count = Array.from(key.name).filter(letter => 'AEIOUaeiou'.includes(letter)).length;
  701. console.log(key.name + ' ima ' + count + ' samoglasnika.');
  702. });
  703. }
  704.  
  705. //vraæa radnom boju koja se koristi za createContainers()
  706. function getRandomColor() {
  707. var color = '#' + ('00000' + (Math.random() * 16777215).toString(16)).slice(-6)
  708. return color;
  709. }
  710.  
  711. //prima data i funckiju getRandomColor() koja genereira random boju za background color kartica
  712. function createContainers(data, callback) {
  713. const container = document.getElementById('card-container');
  714.  
  715. data.forEach((player) => {
  716. const card = document.createElement('div');
  717. card.classList = 'card-body';
  718.  
  719. const content = `
  720. <div class="card">
  721. <div class="card-body">
  722. <h5>${player.name} - ${player.rating}</h5>
  723. </div>
  724. </div>
  725.  
  726. `;
  727. container.innerHTML += content;
  728. });
  729.  
  730. var cardList = document.querySelectorAll(".card");
  731.  
  732. for (var i = 0; i < cardList.length; i++) {
  733. cardList[i].style.backgroundColor = callback();
  734. }
  735. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement