Sobes.tech

Frontend

Pokud je funkce logHello napsána jako šipková funkce a volá se přes fn.call(this, ...args) uvnitř runOnce, co se stane s kontextem this? Co je třeba změnit ve funkci logHello, aby se kontext správně předával?

233

Napište funkci, která převede řetězec z camelCase na snake_case. Nesmí se používat regulární výrazy, kódy znaků nebo pevně daný seznam symbolů; řešení musí být univerzální. Zhodnoťte časovou a prostorovou složitost.

218

Proč při dvou voláních sleep(2000) a sleep(1000) se nejdříve zobrazí log o 1 sekundě a poté o 2? Vysvětlete fungování Event Loop, mikro- a makro úkolů.

214

/* Máme sadu jízdenek ve formátu: [ { from: 'Londýn', to: 'Moskva' }, { from: 'NY', to: 'Londýn' }, { from: 'Moskva', to: 'Svatý Petěrburg' }, ... ] Z těchto jízdenek lze sestavit jedinou nepřerušovanou trasu. V trase nejsou žádné smyčky ani opakování. Je třeba napsat program, který vrátí tyto stejné objekty jízdenek v pořadí podle trasy. */ function getRoute(tickets = [], startCity) { // váš kód zde } console.clear() console.log(getRoute([ { from: 'Londýn', to: 'Moskva' }, { from: 'NY', to: 'Londýn' }, { from: 'Moskva', to: 'Svatý Petěrburg' }, ], 'NY')); /* [ { from: 'NY', to: 'Londýn' }, { from: 'Londýn', to: 'Moskva' }, { from: 'Moskva', to: 'Svatý Petěrburg' }, ] */

203

/** * Funkce `asyncAuth(callback)` přijímá callback, do kterého * může být předána chyba (prvním argumentem) a data * ze backendu (druhým argumentem). * asyncAuth((error, data) => {}); * * Musíte implementovat funkci `auth()`, * která volá `asyncAuth()`, ale vrací Promise. * * @returns {Promise} */ function auth() { // asyncAuth((error, data) => {}); } /** * Funkce `tryAuth()` používá `auth()` a v případě chyby, * provádí N dalších pokusů. * Pokud všechny selžou, vrátí poslední chybu. * * @returns {Promise} */ function tryAuth(n) { }

200

Na čem jste ještě musel psát ve své obchodní zkušenosti, kromě TypeScript a JavaScript?

188

/** * Funkce 'asyncAuth(callback)' přijímá callback, do kterého * může být předána chyba (jako první argument) a data * ze serveru (jako druhý argument). * asyncAuth((error, data) => {}); * * Musíte implementovat funkci 'auth()', * která volá 'asyncAuth()', ale vrací Promise. * * @returns {Promise} */ function auth() { return new Promise((resolve, reject) => { asyncAuth((error, data) => { if (error) { reject(error) } else { resolve(data) } }); }) } /** * Funkce 'tryAuth()' používá 'auth()' a v případě chyby * provádí N dalších pokusů. * Pokud všechny selžou, vrátí poslední chybu. * * @returns {Promise} */ function tryAuth(n) { return new Promise((resolve, reject) => { function attempt(attemptsLeft) { auth().then(resolve).catch((error) => { if (attemptsLeft <= 0) { reject(error); } else { attempt(attemptsLeft - 1); } }); } attempt(n); }); }

186

Co je třeba přidat do metody times, pokud je třeba vzít v úvahu zlomky?

182

/* Je potřeba napsat polyfill pro Array.prototype.some Parametry - callback - funkce, která kontroluje každý prvek, přijímá tři argumenty: - element - Aktuální zpracovávaný prvek v poli. - index (Nepovinné) - Index aktuálně zpracovávaného prvku. - array (Nepovinné) - Pole, na kterém se provádí iterace. - thisArg (Nepovinné) - Hodnota, která se používá jako this při volání callback funkce. Návratová hodnota true, pokud funkce kontroly vrátí pravdivou hodnotu alespoň pro jeden prvek pole. Jinak false. */ Array.prototype.some = function (callback, thisArgs) { const array = this; for (let i = 0; i < array.length; i++) { if (!(i in array)) continue; const result = callback.call(thisArgs, array[i], i, array); if (result) return true; } return false; }

180

V jakém týmu pracujete a na jakém projektu?

174

Lze úkol sčítání promise bez použití statických metod Promise? Čím se liší provádění promise uvnitř smyčky od Promise.all — paralelně nebo sekvenčně?

170

Implementujte dekorátor callLimit(fn, limit, callback), který omezuje počet volání funkce. Přijímá: funkci k dekoraci, maximální počet volání, callback, volaný při posledním volání (volitelně). Vrácená funkce by měla mít metodu reset pro resetování čítače na počáteční hodnotu.

163

Na stromě sedí veverky a vrány. Je třeba napsat funkci, která najde všechny veverky na stromě a vrátí jejich jména. Očekávaný výsledek: ['Acorn', 'Sirsalty', 'Macadamia', 'Kernel'].

161

Určete pořadí výstupu do konzole a hodnoty měřeného času v příkladu se sleep, časovači, Promise a frontami úloh; vysvětlete, proč může být skutečné zpoždění větší než nastavené.

161

Co je vhodnější pro ukládání dat podle klíče: Map nebo obyčejný objekt? Jaké jsou výhody Map?

160

/** * Je nutné napsat asynchronní funkci, * která bude "spát" zadaný počet milisekund, * a poté úspěšně dokončí */ function sleep(duration) { } // Příklad const startTime = Date.now(); console.log("Začínám spát..."); sleep(2000).then(() => { console.log("Probudil se po 2 sekundách!"); console.log("Uplynulý čas: ", Date.now() - startTime); }); sleep(1000).then(() => { console.log("Probudil se po 1 sekundě!"); console.log("Uplynulý čas: ", Date.now() - startTime); });

157

Rozšiřte Array.prototype metodou, která seskupí prvky pole podle klíče vypočítaného předanou funkcí, a vrátí objekt, kde každému klíči odpovídá pole prvků. Vysvětlete, co se stane, pokud funkce výpočtu klíče vrátí něco, co není řetězec nebo číslo.

155

// Dostáváte řetězec složený z latinských písmen, mezer a interpunkce. // Řetězec se nazývá pangram, pokud obsahuje alespoň jednou každé z 26 písmen. Určete, zda je řetězec pangram. const LETTERS = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']; function isPangram(text) { // váš kód zde } console.log(isPangram(`A pangram or holoalphabetic sentence is a using every letter of a given alphabet at least once.`)); // => console.log(isPangram('Waltz, bad nymph, for quick jigs vex.'))

153

/** * Implementujte funkci runOnce, která přijímá * funkci a vrací novou funkci. Nová funkce * může být volána pouze jednou, všechny další * volání vrací undefined. * * Obalená funkce může přijímat argumenty * a vracet výsledek. */ function runOnce(fn) { // váš kód } const logHello = (name) => { console.log(`ahoj, ${name}!`) }; const logHelloOnce = runOnce(logHello); console.clear(); logHelloOnce('Oleg'); // 'ahoj, Oleg!' logHelloOnce('Olga'); // undefined

153
/6