Javascript2 - zbirka zadataka Flashcards
Otvorite http://nsoft.ba/js-tecaj-b/ i kopirajte JSON podatke o proizvodima u varijablu json za daljnje korištenje. Ispišite u konzolu prosjek ID-jeva proizvoda, te ima li više parnih ili neparnih ID-jeva
var json = { "products":{ "76":{ "id":"76", "name":"Kruh", "price":"KM 1.65", "qty":"4", "ingredients":["sol","brasno","voda","kvasac"] }, "14":{ "id":"14", "name":"Mlijeko", "price":"KM 1.43", "qty":"12", "ingredients":["kravlje mlijeko"] }, "48":{ "id":"48", "name":"Secer", "price":"KM 2.64", "qty":"1", "ingredients":["secerna trska"] }, "89":{ "id":"89", "name":"Brasno5kg", "price":"KM 6.90", "qty":"1", "ingredients":["psenica","sjemenke"] }, "5":{ "id":"5", "name":"Argeta", "price":"KM 1.33", "qty":"3", "ingredients":["piletina","sol","zacini"] } } }; function ids(){ var x = json.products; var niz = [], sum = 0, odd=0, even=0, count=0; for (var i in x){ if(parseInt(i)%2 === 0){ even++; } else{ odd++; } sum += parseInt(i); count++; } if(even > odd){ console.log("Vise je parnih"); } else{ console.log("vise je neparnih"); } console.log(sum); } ids();
Ispišite u konzolu ime proizvoda koji ima najmanje sastojaka. Ispišite prosječnu količinu svih proizvoda.
function ingredients(){ var x = json.products, sum=0, avg=0, count=0, max = {}; for (var i in x ){ if (!max.ingredients) { max = x[i]; } if(x[i].ingredients.length > max.ingredients.length){ max = x[i]; } sum += parseInt(x[i].qty); count++; } avg=parseFloat(sum/count).toFixed(2); console.log(max.name); console.log(avg); } ingredients();
Nađite ukupnu vrijednost inventara svih proizvoda na stanju. Ako ona prelazi 50 KM, ispišite količinu najskupljeg proizvoda, a ako ne, ispišite količinu najjeftinijeg proizvoda.
function inventory() { var products = json.products, sum = 0, minQty = 0, maxQty = 0, price = 0, minPrice = 0, maxPrice = 0, qty = 0, minRef = null, maxRef = null; for(var i in products) { price = parseFloat(products[i].price.split(' ')[1]); qty = parseInt(products[i].qty); sum += price * qty;
if(price > maxPrice){ maxQty = qty; } if(minPrice === 0) { minQty = qty; minPrice = price; } if( price < minPrice ){ minQty = qty; } } if(sum > 50 ){ console.log(‘Kolicina najjefitnijeg: ‘ + minQty); }else{ console.log(‘Kolicina najskupljeg ‘ + maxQty); } } inventory();
Napravite klasu „Product“, koja sadrži svojstva name (string), price (number), currency (string), qty (number). Napravite javne metode „buy()“ i „sell()“ koje će povećavati/smanjivati količinu za 2.
function Product(name, price, currency, qty) { this.name = name; this.price = price; this.currency = currency; this.qty = qty; var changePrice = function(price, action){ if(action === 'buy') { price += price * 0.1; } else{ price -= price * 0.1; } return price; } this.changePrice = function (price, action) { return changePrice(price, action); } } Product.prototype.buy = function ( callback ) { this.qty += 1; console.log('price = ' + this.price); return callback(this.price, 'buy'); } Product.prototype.sell = function ( callback ) { this.qty -= 1; return callback(this.price, 'sell'); }
Metode „buy()“ i „sell()“ trebaju imati callback na metodu „changePrice()“, koja treba pozvati istoimenu privatnu metodu koja će povećati cijenu za 10% kad se proizvodu smanji dostupna količina, i obratno, smanjiti ju za 10% kad se količina poveća. (Urađeno iznad!) Instancirajte jedan proizvoljan objekt, podesite mu cijenu na 10 i promijenite cijenu pozivom na „buy()“ i „sell()“.
var jana = new Product(‘Jana’, 10, ‘KM’, 100); console.log(‘Prije buy’ + jana.price);
jana. price = jana.buy(jana.changePrice); console.log(‘Poslije buy ‘ + jana.price);
jana. price = jana.sell(jana.changePrice); console.log(‘Poslije sell ‘ + jana.price);
Instancirajte objekte klase „Product“ za svaki proizvod definiran u varijabli json. Zamijenite količine najjefitinijem i najskupljem objektu proizvoda. U prototype klase „Product“ dodajte metode „getName()“, „getPrice()“, „getCurrency()“ i „getQty()“.
var kruh = new Product('Kruh', 1.65, 'KM', 4); var mlijeko = new Product('Mlijeko', 1.43, 'KM', 12); var secer = new Product('Secer', 2.64, 'KM', 1); var brasno = new Product('Brasno', 6.90, 'KM', 1); var argeta = new Product('Argeta', 1.33, 'KM', 3); var tmp = 0; tmp = argeta.qty; argeta.qty = brasno.qty; brasno.qty = tmp; Product.prototype.getName = function () { return this.name; } Product.prototype.getPrice = function () { return this.price; } Product.prototype.getCurrency = function () { return this.currency; } Product.prototype.getQty = function () { return this.qty; }
Zadan je objekt: var putovanje = { putovanje1 : { grad: "London",cijena_putovanja : "580€", trajanje_putovanja : "130min", polazak : "1. svibanj 2015.", povratak : "10. svibanj 2015.", osiguran_smjestaj : "da", organizator : "Crno jaje" } , putovanje2 : { grad: "Pariz", cijena_putovanja : "600€", trajanje_putovanja : "105min", polazak : "15. svibanj 2015.", povratak : "22. svibanj 2015.", osiguran_smjestaj : "da", organizator : "Crno jaje" }, putovanje3 : { grad: "Torino", cijena_putovanja : "120€", trajanje_putovanja : "40min", polazak : "14. travanj 2015.", povratak : "16. travanj 2015.", osiguran_smjestaj : "da", organizator : "Trivago" }, putovanje4 : { grad: "London", cijena_putovanja : "150€", trajanje_putovanja : "130min", polazak : "1. svibanj 2015.", povratak : "10. svibanj 2015.", osiguran_smjestaj : "ne", organizator : "Crno jaje" }, putovanje5 : { grad: "Munchen", cijena_putovanja : "100€", trajanje_putovanja : "80min", polazak : "1. svibanj 2015.", povratak : "10. svibanj 2015.", osiguran_smjestaj : "ne", organizator : "Trivago" } }; Ispisati sva putovanja koja organizira Crno jaje, te ispisati broj putovanja koja organizira Trivago.
//
Ispisati sva putovanja koja imaju organiziran smještaj.
//
Sortirati putovanja po duljini njihovog trajanja (polazak i povratak). Ispisati sva putovanja koja imaju isto trajanje putovanja (polazak i povratak).
//
Napraviti novi property koji će se zvati po vašem izboru te mu dodijeliti cijenu putovanja u KM. (1€ = 1.94KM).
//
Sortirati putovanja od jeftinijeg prema skupljem.
//
Napraviti metodu koja će preračunati trajanje putovanja iz minuta u sate i minute. Zatim sortirati putovanja prema potrebnom vremenu leta.
//
Napraviti metodu „odgodi“, koja će odgoditi polazak putovanja za 1 dan. Zatim pozvati jedno putovanje i odgoditi njegov polazak, te ispisati rezultat.
//
Izbrisati nanovo dodavane property-e, te ispisati staro-novo stanje.
//
Napišite funkciju za asinkroni dohvat podataka sa servera, te dohvatite JSON s “http://jsbin.com/hugafagiwe/2.js” i preko callbacka pozovite obradu podataka, ukoliko je zahtjev uspješno izvršen.
//
Ispišite starost svakog CD-a te ukupnu prosječnu starost svih CD-ova.
//
Ispišite nazive CD-ova kronološki poredane.
//
Ispišite one zemlje koje se ponavljaju na više od 3 CD-a.
//
Ispišite najskuplji i najjeftiniji CD.
//
Ispišite imena autora kronološki poredane.
//
Napišite funkciju za asinkroni dohvat podataka sa servera. Dohvatite JSON s “http://jsbin.com/funimefupo.js” i preko callbacka pozovite obradu podataka. Ako nećete raditi u jsbinu, kopirajte JSON.
//
Ispišite nazive filmova kronološki poredane.
//
Ispišite prosječnu starost filmova.
//
Ispišite nazive glumaca koji se ponavljaju u više filmova.
//
Ispišite za svaki jezik u koliko različitih filmova se koristi.
//
Definirajte klasu „Movie“ koja će sadržati naziv, prosječnu ocjenu i broj glasova.
//
Dodajte joj metodu „vote“ koja će primati ocjene 1-10 i koja će preračunati prosječnu ocjenu.
//
Instancirajte objekte za svaki film iz JSON-a i glasajte za pojedini film i ispišite novu prosječnu ocjenu.
//
Dodati funkciju „playMovie()“. Ona treba puštati film pretvarajući trajanje iz minuta u sekunde (na početku ispiše samo film taj i taj počeo je u x:y). Kada film završi potrebno je pozvati callback funkciju „onMovieFinish()“ koja bi ispisala koji film je završio i kada. (Koristiti Date() i setTimeout().)
//
Zadan je JSON objekt: var jsonObj = { "phones":[ { "id":6144, "name":"Sony Xperia Z2", "manufacturer":"Sony", "ram":"3 GB", "internal_memory":"16 GB", "cpu":"Quad-core 2.3 GHz Krait 400", "back_camera":"20.7 MP", "front_camera":"2.2 MP", "gpu":"Adreno 330", "battery":"3200 mAh", "battery_removable":"no", "price":"490 EUR" }, { "id":6033, "name":"Samsung Galaxy S5", "manufacturer":"Samsung", "ram":"2 GB", "internal_memory":"32 GB", "cpu":"Quad-core 2.5 GHz Krait 400", "back_camera":"16 MP", "front_camera":"2 MP", "gpu":"Adreno 330", "battery":"2800 mAh", "battery_removable":"yes", "price":"430 EUR" }, { "id":5705, "name":"LG Nexus 5", "manufacturer":"LG", "ram":"3 GB", "internal_memory":"16 GB", "cpu":"Quad-core 2.3 GHz Krait 400", "back_camera":"8 MP", "front_camera":"1.3 MP", "gpu":"Adreno 330", "battery":"2300 mAh", "battery_removable":"no", "price":"260 EUR" }, { "id":6077, "name":"LG G2 mini", "manufacturer":"LG", "ram":"1 GB", "internal_memory":"8 GB", "cpu":"Quad-core 1.2 GHz Cortex-A7", "back_camera":"8 MP", "front_camera":"1.3 MP", "gpu":"Adreno 305", "battery":"2440 mAh", "battery_removable":"yes", "price":"230 EUR" }, { "id":5497, "name":"Sony Xperia M", "manufacturer":"Sony", "ram":"1 GB", "internal_memory":"4 GB", "cpu":"Dual-core 1 GHz Krait", "back_camera":"5 MP", "front_camera":"VGA", "gpu":"Adreno 305", "battery":"1750 mAh", "battery_removable":"yes", "price":"110 EUR" }, { "id":3724, "name":"Samsung Galaxy Ace", "manufacturer":"Samsung", "ram":"512 MB", "internal_memory":"158 MB", "cpu":"800 MHz ARM 11", "back_camera":"5 MP", "front_camera":"no", "gpu":"Adreno 200", "battery":"1350 mAh", "battery_removable":"yes", "price":"90 EUR" } ] }; Ispisati naziv najskupljeg mobitela.
//
Ispisati sve mobitele koji imaju uklonjivu bateriju.
//
Napisati funkciju „changePrice()“ koja omogućava unos nove cijene (od korisnika) i promjenu cijene proslijeđenom mobitelu. Pritom pripaziti da korisnik unese prihvatljivu cijenu (mora se sastojati samo od brojeva i nova cijena smije biti niža ili viša samo za 0% do 20% od stare cijene). Sve dok nova cijena ne prođe provjeru, ispisivati odgovarajuću poruku i tražiti ponovan unos od korisnika. Pri spremanju nove cijene u objekt, na kraj cijene trebate dodati valutu “EUR”. Pozvati funkciju „changePrice()“ i promijeniti cijenu mobitela “Samsung Galaxy S5”.
//
Napisati funkciju „avgRam()“ koja izračunava prosječnu količinu ram-a mobitela i ispisuje ju u GB i MB.
//
Napisati funkciju „sortById()“ koja treba poredati mobitele po ID-evima od najmanjeg prema najvecem, zatim ih ispisati.
//
Napraviti klasu „Smartphone“ koja se sastoji od svojstava: name, manufacturer, internal_memory i price. Instancirati objekte klase Smartphone za svaki mobitel iz zadanog objekta “jsonObj” (to učiniti dinamički, ne samo copy-paste-ati vrijednosti svojstava iz zadanog objekta).
//
Dodati svojstvo discount, postaviti njegovu vrijednost svim objektima na “0%”.
//
Dodati metodu „setDiscount“ koja ce preko primljenog parametra povećati discount za 10. Metoda prima i callback na funkciju „printPrice()“ koja ispisuje cijenu sa uračunatim popustom.
//