Sobes.tech

Frontend

Եթե logHello ֆունկցիան գրված է որպես սլաքային ֆունկցիա և կանչվում է runOnce-ի ներսում՝ fn.call(this, ...args) միջոցով, ինչ կլինի this կոնտեքստի հետ: Ինչ պետք է փոխել logHello ֆունկցիայում, որպեսզի կոնտեքստը ճիշտ փոխանցվի?

250

Գրեք ֆունկցիա, որը փոխում է camelCase տողը snake_case: Չպետք է օգտագործել ռեգուլյար արտահայտություններ, նիշերի կոդեր կամ սեղմված ցուցակներ նշանների համար; լուծումը պետք է լինի համընդհանուր: Արձագանքեք ժամանակային և տարածքային բարդությանը։

242

Ինչու երբ երկու անգամ կանչում ենք sleep(2000) և sleep(1000), սկզբում ցուցադրվում է 1 վայրկյանի մասին լոգը, իսկ հետո՝ 2-ի մասին: բացատրեք Event Loop-ի, միկրո և մակրո-տասքների աշխատանքը։

227

Տվյալների բազաների և API-ների հետ աշխատելու գիտելիք

221

/* Մեր մոտ կա տոմսերի հավաքածու հետևյալ ձևաչափով՝ [ { from: 'Լոնդոն', to: 'Մոսկվա' }, { from: 'NY', to: 'Լոնդոն' }, { from: 'Մոսկվա', to: 'Սանկտ Պետերբուրգ' }, ... ] Այս տոմսերից կարելի է կառուցել միակ, անընդհատ երթուղի: Երթուղում չկան շրջաններ կամ կրկնություններ: Դուք պետք է գրել ծրագիր, որը վերադարձնում է նույն տոմսերի օբյեկտները երթուղու կարգով: */ function getRoute(tickets = [], startCity) { // ձեր կոդը այստեղ } console.clear() console.log(getRoute([ { from: 'Լոնդոն', to: 'Մոսկվա' }, { from: 'NY', to: 'Լոնդոն' }, { from: 'Մոսկվա', to: 'Սանկտ Պետերբուրգ' }, ], 'NY')); /* [ { from: 'NY', to: 'Լոնդոն' }, { from: 'Լոնդոն', to: 'Մոսկվա' }, { from: 'Մոսկվա', to: 'Սանկտ Պետերբուրգ' }, ] */

217

/** * `asyncAuth(callback)` ֆունկցիան ընդունում է callback, որի մեջ * կարող է փոխանցվել սխալ (առաջին արգումենտի रूपमा) և տվյալներ * բեկենդից (երկրորդ արգումենտի रूपमा): * asyncAuth((error, data) => {}); * * Դուք պետք է իրականացնել `auth()` ֆունկցիան, * որը կանչում է `asyncAuth()`, բայց վերադարձնում է Promise: * * @returns {Promise} */ function auth() { // asyncAuth((error, data) => {}); } /** * `tryAuth()` ֆունկցիան օգտագործում է `auth()` և, սխալ դեպքում, * կատարում է N լրացուցիչ փորձեր: * Եթե բոլորն անհաջող լինեն, վերադարձնում է վերջին սխալը: * * @returns {Promise} */ function tryAuth(n) { }

212

Եթե մեզ անհրաժեշտ է հաշվի առնել մասիվ թվեր, ինչ պետք է ավելացնել մեթոդին times?

199

/* Պետք է գրել polyfill for Array.prototype.some Պարամետրեր - callback - ֆունկցիա, որը ստուգում է յուրաքանչյուր տարր, ընդունում է երեք արգումենտ - element - Ներկա մշակվող տարր զանգվածում: - index (Ընտրովի) - Ներկա մշակվող տարրի ինդեքսը: - array (Ընտրովի) - Զանգված, որի վրա կատարվում է անցում: - thisArg (Ընտրովի) - արժեք, որը օգտագործվում է որպես this callback- ի կատարման ժամանակ: Վերադարձվող արժեք true, եթե ստուգման ֆունկցիան վերադարձնում է truthy արժեք առնվազն մեկ տարր համար զանգվածում: Այլապես, 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; }

197

/** * 'asyncAuth(callback)' ֆունկցիան ընդունում է callback, որի մեջ * կարող է փոխանցվել սխալ (առաջին արգումենտ) և տվյալներ * բեկենդից (երկրորդ արգումենտ): * asyncAuth((error, data) => {}); * * Դուք պետք է իրականացնել 'auth()' ֆունկցիան, * որը կանչում է 'asyncAuth()', բայց վերադարձնում է Promise: * * @returns {Promise} */ function auth() { return new Promise((resolve, reject) => { asyncAuth((error, data) => { if (error) { reject(error) } else { resolve(data) } }); }) } /** * 'tryAuth()' ֆունկցիան օգտագործում է 'auth()'-ն և, սխալի դեպքում, * անում N լրացուցիչ փորձեր: * Եթե բոլորն էլ ձախողվեն, վերադարձնում է վերջին սխալը: * * @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); }); }

194

Ի՞նչ այլ բան եք գրել ձեր առևտրային փորձի ընթացքում, բացի TypeScript և JavaScript-ից։

192

Ո՞ր թիմում եք աշխատում և ինչ նախագծի վրա:

190

Կարո՞ղ է լուծել խոստումների գումարման խնդիր առանց Promise-ի ստատիկ մեթոդների օգտագործման: Ինչպես է տարբեր լինել խոստումների կատարման ընթացքը ցիկլի ներսում Promise.all-ի համեմատ՝ հորիզոնական կամ հերթական?

183

/** * Իրականացրեք runOnce անվամբ օղակաձև ֆունկցիան, որը * ընդունում է ֆունկցիա և վերադարձնում նոր ֆունկցիա: Նոր * ֆունկցիան կարող է կանչվել միայն մեկ անգամ, բոլոր հաջորդ * կանչերը վերադարձնում են undefined: * * Օղակաձև ֆունկցիան կարող է ընդունել արգումենտներ * և վերադարձնել արդյունք: */ function runOnce(fn) { // ձեր կոդը } const logHello = (name) => { console.log(`բարև, ${name}!`) }; const logHelloOnce = runOnce(logHello); console.clear(); logHelloOnce('Oleg'); // 'բարև, Oleg!' logHelloOnce('Olga'); // undefined

173

Կառուցել callLimit(fn, limit, callback) դեկորատորը, որը սահմանափակում է ֆունկցիայի կանչերի քանակը: Ստանում է՝ դեկորատորին ենթակա ֆունկցիա, առավելագույն կանչերի քանակը, callback, որը կանչվում է վերջին կանչի ժամանակ (ընտրովի): Վերադարձվող ֆունկցիան պետք է ունենա reset մեթոդ, որը վերականգնում է հաշվիչը սկզբնական դիրքին։

173

Ի՞նչն է ավելի լավ օգտագործել բանալիով տվյալներ պահելու համար՝ Map կամ սովորական օբյեկտ: Ինչ են Map-ի առավելությունները?

171

Նշեք կոնսոլում արտածման կարգը և չափված ժամանակի արժեքները sleep, timer, Promise և առաջադրանքների հերթերի օրինակով; բացատրեք, թե ինչու իրական ուշացումը կարող է ավելի մեծ լինել, քան սահմանվածը։

171

Կա ծառ, որի վրա նստած են գազաններ և կաքավներ: Պետք է գրել ֆունկցիա, որը գտնում է բոլոր գազանները ծառի վրա և վերադարձնում նրանց անունները: Ապահովված արդյունք: ['Acorn', 'Sirsalty', 'Macadamia', 'Kernel'].

169

/** * Պետք է գրել strjoin ֆունկցիան, * որը միացնում է տողերը բաժանարարով: */ function strjoin() { // կոդ այստեղ } console.log(strjoin('.', 'a', 'b', 'c')) // 'a.b.c' console.log(strjoin('-', 'a', 'b', 'c', 'd', 'e', 'f')) // 'a-b-c-d-e-f'

166

Ինչն է ձեզ դուր գալիս և ինչն է ձեզ դուր չգալիս աշխատանքի մեջ ընկերությունում։

166

Լայնացրեք Array.prototype-ը մեթոդով, որը խմբավորում է զանգվածի տարրերը ըստ բանալիի, որը հաշվարկվում է փոխանցված ֆունկցիայի միջոցով, և վերադարձնում է օբյեկտ, որտեղ յուրաքանչյուր բանալիին համապատասխան է տարրերի զանգվածը: բացատրեք, թե ինչ տեղի կունենա, եթե բանալիի հաշվարկման ֆունկցիան վերադարձնի ինչ-որ բան, որը ոչ թե տող է, ոչ էլ թիվ։

165
/6