IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Spočítejte odchylku 3. produktu od průměrné ceny.

V předchozím kvízu, Online test znalostí JavaScript, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Ladislav Šafránek:18.11.2021 15:23

https://www.itnetwork.cz/…riklady-pole

Zdravím, řeším tyto vzorové příklady, a u druhého jsem si skutečně nevěděl rady. Tak jsem otevřel řešený vzor, a nerozumím těmto věcem.

"for (let cena of ceny)" kde se tam vzala proměnná cena, když nikde nebyla deklarována?
"soucet = soucet + cena;" to znamená, že se do proměnné soucet uloží hodnota, která představuje výchozí hodnotu proměnné součet, a k ní přičtenou hodnotu cena?

Co znamená toto "let prumer = soucet / ceny.length;", to netuším vůbec: co tam značí to length?

Tomuhle ale rozumím "let odchylka = prumer - ceny[2];" Hodnotu odchylka určíme jako hodnotu prumer mínus 3. položka v poli ceny.

 
Odpovědět
18.11.2021 15:23
Avatar
Wikan
Člen
Avatar
Wikan:19.11.2021 0:16

Jak to, že tam není deklarována? Máš tam přece "let cena", což je deklarace.
"soucet = soucet + cena;" jsi popsal správně.
"co tam značí to length?" length je velikost pole, neboli počet prvků v něm

 
Nahoru Odpovědět
19.11.2021 0:16
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:19.11.2021 8:07
for (let cena of ceny) // to je takova oskliva nepekna vec, kterou spousta lidi v posledni dobe v js dela,
//deklarujes si promenne, kde se ti zlibi.

let cena;
for (cena of ceny)

var i, end;
end = array.length;
for (i=0; i<end; i++)

for (var i=0, end=array.length; i<end; i++) // tohle je jen osklive

for (var i=0; i<array.length; i++) // ALE tohle je naprosto spatne, a tez to uvidis v hodne prikladech i ve skolnich;
// Nikdy bys nemel davat array.length do podminek cyklu, protoze to brzdi znatelne provedeni cyklu.
// end - pouzity predtim je pro cyklus konstanta a tudiz ho uz nevyhodnocuje pri kazde iteraci i
// Snadno si vsimnes rozdil, pokud nekdy budes delas sortovaci cykly nebo, proste narocnejsi.

A tento zapis je opet uplne spatne. Ikdyz to v modernim js asi funguje

for (let cena of ceny) - toto je zapis cyklu pro pole typu {}
ceny.length - length je delka pole pro pole typu []

Totiz, ten FOR za normalnich okolnosti prochazi vsechny objekty pole. Dokonce i length. Ale moderni js to asi umi odbourat. Ja byt tebou, tak se tomu z daleka vyhnu. Muzes riskovat zacykleni programu nebo pad browseru.
Nekdo by mel upozornit autory, ze uci delat chyby.
Spravne to ma byt tako:

var cena, ceny, len; // 'var' nebo modernejsi 'let', ja pouzivam var
ceny = {hrebik: 13, kladivo:45, pernicek: 3};
len = 0;
for (cena of ceny)
    {
    cokoliv dalsiho
    len++; // jedina moznost, jak length zjistit, je cyklem u pole {} je, ho spocitat polozku po polozce
    // pokud se teda nezmenil mezitim js, coz nevylucuji
    }

var cena, ceny, len, i;
ceny = [13, 45, 3];
len = ceny.length;
for (i=0; i<len; i++)
    {cokoliv dalsiho}
Editováno 19.11.2021 8:09
 
Nahoru Odpovědět
19.11.2021 8:07
Avatar
JsonKody
Člen
Avatar
Odpovídá na Peter Mlich
JsonKody:22.11.2021 13:34
for (let cena of ceny) {
  // telo
}

Neni zadna neprijemna nepekna vec ale naprosto standardni a normalni zpusob zapisu. Casto se pise spise spravneji

for (const cena of ceny) {
  // telo
}

jelikoz cena se nebude menit - stejne existuje JEN v tele cyklu for a pak se zahodi.

Dalsi nesmysl je druhhy komentar

toto je zapis cyklu pro pole typu {}

Pro prochazeni objektu mame cyklus FOR..IN ktery je malinko zastaraly ale coz.
Pokud je nejaka typ zaroven 'iterator' resp. implementuje nav. vzor. iterator typicky je to v JS pole (array) nebo string, muzeme ho prochazet pomoci FOR..OF

for..of neprochazi vsechny objekty pole -> prochazi iterator podle pravidel ktera pro nej byla napsana 'jak ho prochazet' takze zadne .lenght atd.

Shrnuti for..of NENI for..in. Ceny v tomto pripade musi byt zapsany v nejakem iteratoru, pravdepodobne v poli takto [14, 52, 78]. Zapis deklarace rovnou v cyklu je spravny -> dana promenna bude existovat pouze v danem 'tiku' daneho cyklu, pak se zahodi a vytvori nova s novou hodnotou.

PS: ted jsem si vsiml

... zapis cyklu pro pole typu {}
... delka pole pro pole typu []

V JS neni nic jako pole typu {}. Je budto Array -> pole -> [] (literal) nebo Object -> objekt -> {} (literal)

 
Nahoru Odpovědět
22.11.2021 13:34
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:22.11.2021 20:42

Tak to beru zpet, to jsem prehlehl. for-in je pro {}. for-of je nejaka novinka. Ty nove zapisy v js prave neovladam. Takze mne mrzi, ze tu mystifikuji.

 
Nahoru Odpovědět
22.11.2021 20:42
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.