Ce este de preferat pentru stocarea datelor după cheie: Map sau un obiect obișnuit? Care sunt avantajele Map?
Frontend
/** * Implementați metoda times pentru un obiect numeric. * Funcția trebuie să accepte un callback și să îl apeleze * de numărul specificat de ori cu indicele iterației curente. */ Number.prototype.times = function (callback) { const n = Number(this); for (let i = 0; i < n; i++) { callback(i); } } // Exemple console.clear(); (3).times(console.log) // 0 // 1 // 2
Ce îți place și ce nu îți place la locul tău de muncă în companie?
/** * Este este necesar să scrieți o funcție strjoin, * care unește șirurile de caractere folosind un separator. */ function strjoin() { // cod aici } console.log(strjoin('a', 'b', 'c')) // 'a.b.c' console.log(strjoin('a', 'b', 'c', 'd', 'e', 'f')) // 'a-b-c-d-e-f'
Există un copac pe care stau veverițe și corbi. Este necesar să scriem o funcție care găsește toate veverițele din copac și le returnează numele. Rezultatul așteptat: ['Acorn', 'Sirsalty', 'Macadamia', 'Kernel'].
/* Trei secțiuni de cod sunt date. Este necesar să scrieți rezultatul fiecărui console.log. */ var n = 1; function f(n) { n = 3; } f(n); console.log(n); // ?? // ---------------- var obj = { a: 1 }; function f1(o) { o.a = 5; } f1(obj); console.log(obj); // ?? // ---------------- var obj = { a: 1 }; function f2(o) { o = { hello: 1 }; } f2(obj);
Cum se vor schimba complexitatea asimptotică și consumul de memorie în sarcina camelCase → snake_case dacă rezultatul este construit prin concatenarea de șiruri în loc de un tablou de caractere?
/* Două liste sortate cu intervale de prezență a utilizatorilor online pe parcursul zilei sunt date. Începutul intervalului este strict mai mic decât sfârșitul. Este necesar să calculați intervalele în care ambii utilizatori au fost online. Intervalele sunt indicate în ore, considerând că pot fi de la 0 la 24. */ intersecție( [[8, 12], [17, 22]], [[5, 11], [14, 18], [20, 23]] )// [[8, 11], [17, 18], [20, 22]] intersecție( [[9, 15], [18, 21]], [[10, 14], [21, 22]] )// [[10, 14]] function intersecție(utilizator1, utilizator2) { // scrieți codul dvs. aici }
De cât timp lucrați în companie?
Rescrieți funcția strjoin fără a folosi parametri rest, folosind în schimb obiectul arguments.
Implementați metoda Array.prototype.groupBy, care returnează o versiune structurată a array-ului de obiecte, unde fiecare cheie este rezultatul apelului funcției transmise, iar valoarea este un array de elemente corespunzătoare acestei chei.
De ce for...of este evidențiat în roșu în TypeScript, dar for normal nu?
// Este necesar să implementați metoda groupBy, care extinde metodele standard ale array-urilor. // Metoda trebuie să returneze o versiune grupată a array-ului - un obiect, // în care fiecare cheie este rezultatul executării funcției fn(arr[i]), // iar fiecare valoare este un array care conține toate elementele array-ului original cu această cheie. // cod aici // Exemplul 1 const array1 = [ { id: 1 }, { id: 1 }, { id: 2 } ]; const fn = (item) => item.id; console.log(array1.groupBy(fn)); // { // 1: [{ id: 1 }, { id : 1 }], // 2: [{ id: 2 }] // } // Exemplul 2 const array2 = [1, 2, 3]; console.log(array2.groupBy(String)); // { // "1": [1], // "2": [2], // "3": [3] // } // Exemplul 3 const array3 = [3.3, 0.5, 1.4]; console.log(array3.groupBy(Math.round)); // { // 3: [3.3], // 1: [0.5, 1.4] // }
Într-un prototip al unei rețele de publicitate, vânzarea spațiilor publicitare funcționează astfel: cumpărătorii indică în avans prețul lor, iar pentru fiecare spațiu publicitar răspund dacă sunt dispuși să îl cumpere sau nu. Este necesar să implementați o funcție care, înainte de a vinde un spațiu publicitar, să aștepte acceptarea sau refuzul cumpărătorilor cu cele mai mari oferte, apoi să vândă spațiul cumpărătorului cu cea mai mare ofertă dintre cei care au acceptat. Răspunsul funcției trebuie să fie returnat cât mai rapid posibil. Trebuie să returnați indexul cumpărătorului. Exemple: Cumpărătorii oferă prețuri 1, 5, 10 Cumpărătorul cu oferta 10 a refuzat Cumpărătorul cu oferta 1 a acceptat // Încă așteptăm, deoarece poate răspunde cumpărătorul cu prețul 5 Cumpărătorul cu oferta 5 a acceptat // Alegem cumpărătorul cu oferta 5 ------------ Cumpărătorii oferă prețuri 1, 5, 10 Cumpărătorul cu oferta 10 a refuzat Cumpărătorul cu oferta 5 a acceptat // Nu mai așteptăm răspunsul de la cumpărătorul cu oferta 1 - acesta sigur nu va fi ales ------------ Cumpărătorii oferă prețuri 1, 2 Cumpărătorul cu oferta 1 a refuzat Cumpărătorul cu oferta 2 a refuzat // Nu alegem niciun cumpărător interface Buyer { price: number; accepts: () => Promise<boolean>; } async function bestBuyer(buyers) { const sorted = buyers.map((buyer, index) => ({buyer, index})).sort((a, b) => a.buyer.price - b.buyer.price); const promise = sorted.map(({buyer}) => buyer.accepts()); for (let i = 0; i < sorted.length; i++) { const accepted = await promise[i]; if (accepted) { return sorted[i].index; } } if (await buyers[0].accepts()) { return 0; } return -1; }
function any(promises) { // codul tău aici }
Scrieți o funcție sleep care returnează o Promise și se finalizează după numărul specificat de milisecunde.
De ce nu se poate folosi o funcție săgeată pentru groupBy? Ce va fi this în săgeată?
Scrieți o funcție tries(n), care apelează funcția aus de până la n ori: returnează primul rezultat de succes, iar dacă toate încercările eșuează, aruncă ultima eroare.
// Ți se dă un șir format din litere latine, spații și semne de punctuație. // Un șir se numește pangram dacă conține cel puțin o dată fiecare dintre cele 26 de litere. Determină dacă șirul este pangram. const LETTERS = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']; function isPangram(text) { // codul tău aici } 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.'))
// și fiecare valoare este un array care conține toate elementele array-ului original cu această cheie. // cod aici // Exemplul 1 const array1 = [ { id: 1 }, { id: 1 }, { id: 2 } ]; const fn = (item) => item.id; console.log(array1.groupBy(fn)); // { // 1: [{ id: 1 }, { id: 1 }], // 2: [{ id: 2 }] // } // Exemplul 2 const array2 = [1, 2, 3]; console.log(array2.groupBy(String));