Açar ilə məlumat saxlamaq üçün nə daha yaxşıdır: Map və ya adi obyekt? Map-in üstünlükləri nədir?
Frontend
/** * Rəqəmli obyekt üçün times metodunu həyata keçirin. * Funksiya callback qəbul etməli və onu * cari iterasiya indeks ilə müəyyən edilmiş sayda çağırmalıdır. */ Number.prototype.times = function (callback) { const n = Number(this); for (let i = 0; i < n; i++) { callback(i); } } // Nümunələr console.clear(); (3).times(console.log) // 0 // 1 // 2
Şirkətdə işinizdə nəyi sevirsiniz və nəyi sevmirsiniz?
/** * Stringləri ayırıcı ilə birləşdirən strjoin funksiyasını yazmaq lazımdır. */ function strjoin() { // kod burada } console.log(strjoin('a', 'b', 'c')) // 'a.b.c' console.log(strjoin('a', 'b', 'c', 'd', 'e', 'f')) // 'a-b-c-d-e-f'
Ağacda siçanlar və qartallar oturur. Ağacda bütün siçanları tapıb adlarını qaytaran funksiya yazmaq lazımdır. Gözlənilən nəticə: ['Acorn', 'Sirsalty', 'Macadamia', 'Kernel'].
/* Üç kod bölməsi verilir. Hər bir console.log-un nəticəsini yazmaq lazımdır. */ 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);
camelCase → snake_case vəzifəsində, nəticə simvol massivindən çox, sətirlərin birləşdirilməsi ilə qurulursa, asymptotik mürəkkəblik və yaddaş istifadəsi necə dəyişəcək?
/* Gün boyunca istifadəçilərin onlayn olma intervallarını göstərən iki sıralanmış siyahı verilir. İntervalın başlanğıcı, sonunda sərt şəkildə kiçikdir. Hər iki istifadəçinin onlayn olduğu intervalları hesablamaq lazımdır. İntervallar saatlarda göstərilir və 0-dan 24-ə qədər ola bilər. */ kesişim( [[8, 12], [17, 22]], [[5, 11], [14, 18], [20, 23]] )// [[8, 11], [17, 18], [20, 22]] kesişim( [[9, 15], [18, 21]], [[10, 14], [21, 22]] )// [[10, 14]] function kesişim(istifadəçi1, istifadəçi2) { // kodunuzu buraya yazın }
Şirkətdə nə qədərdir işləyirsiniz?
Rest parametrlərindən istifadə etmədən, onun yerinə arguments obyektindən istifadə edərək strjoin funksiyasını yenidən yazın.
Array.prototype.groupBy metodunu həyata keçirin, bu metod obyektlər massivinin strukturlaşdırılmış versiyasını geri qaytarır, burada hər açar ötürülən funksiyanın çağırışının nəticəsidir və dəyər bu açara uyğun elementlərin massividir.
Niyə TypeScript-də for...of qırmızı ilə vurğulanır, amma adi for yox?
// Array metodlarını genişleten groupBy metodunu uygulamaq lazımdır. // Bu metod array-in qruplaşdırılmış versiyasını qaytarmalıdır - obyekt, // onun hər bir açarı fn(arr[i]) funksiyasının icrasının nəticəsi olmalıdır, // və hər bir dəyər bu açarla əlaqəli bütün elementləri ehtiva edən array olmalıdır. // kod burada // Nümunə 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 }] // } // Nümunə 2 const array2 = [1, 2, 3]; console.log(array2.groupBy(String)); // { // "1": [1], // "2": [2], // "3": [3] // } // Nümunə 3 const array3 = [3.3, 0.5, 1.4]; console.log(array3.groupBy(Math.round)); // { // 3: [3.3], // 1: [0.5, 1.4] // }
Reklam şəbəkəsinin prototipində, reklam yerlərinin satışı aşağıdakı kimi təşkil olunub: alıcılar əvvəlcədən öz qiymətlərini bildirirlər və hər bir reklam yeri üçün razı olub-olmadıqlarına cavab verirlər. Satışdan əvvəl, ən yüksək qiymət təklif edən alıcıların razılıq və ya rədd cavablarını gözləyən və sonra razı olanlar arasından ən yüksək qiymətə sahib alıcıya satışı həyata keçirən bir funksiya tətbiq etmək lazımdır. Funksiyanın cavabını mümkün qədər tez geri qaytarmalısınız. Alıcı indeksini geri qaytarın. Nümunələr: Alıcılar 1, 5, 10 qiymət təklif edir 10 qiymət təklif edən alıcı rədd cavabı verdi 1 qiymət təklif edən alıcı razılaşdı // Hələ də gözləyirik, çünki 5 qiymət təklif edən alıcı cavab verə bilər 5 qiymət təklif edən alıcı razılaşdı // 5 qiymət təklif edən alıcıyı seçirik ------------ Alıcılar 1, 5, 10 qiymət təklif edir 10 qiymət təklif edən alıcı rədd cavabı verdi 5 qiymət təklif edən alıcı razılaşdı // 1 qiymət təklif edən alıcının cavabını gözləməyirik - o, mütləq seçilməyəcək ------------ Alıcılar 1, 2 qiymət təklif edir 1 qiymət təklif edən alıcı rədd cavabı verdi 2 qiymət təklif edən alıcı rədd cavabı verdi // Heç bir alıcı seçmirik 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) { // kodunuz burada }
Təyin olunan millisekansiya qədər tamamlanan Promise qaytaran sleep funksiyasını yazın.
Niyə groupBy üçün ox funksiyası istifadə edilə bilməz? Oxda this nə olacaq?
tries(n) funksiyasını yazın, bu funksiya aus funksiyasını n dəfə çağırır: ilk uğurlu nəticəni qaytarır və əgər bütün cəhdlər uğursuz olarsa, sonuncu cəhdin xətasını atır.
// Sizə latın hərflərindən, boşluqlardan və durğu işarələrindən ibarət sətir verilir. // Sətir ən azı bir dəfə hər 26 hərfi ehtiva edirsə, pangram adlanır. Sətirin pangram olub-olmadığını müəyyən edin. const LETTERS = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']; function isPangram(text) { // kodunuz buraya } 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.'))
// hər dəyər, bu açar ilə orijinal massivdən bütün elementləri ehtiva edən massivdir. // kod burada // Nümunə 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 }] // } // Nümunə 2 const array2 = [1, 2, 3]; console.log(array2.groupBy(String));