თუ logHello ფუნქცია არის დაწერილი როგორც სლაკი და იძახება runOnce-ის შიგნით fn.call(this, ...args) საშუალებით, რა მოხდება this კონტექსტთან? რა უნდა შეიცვალოს logHello ფუნქციაში, რათა კონტექსტი სწორად გადაეცეს?
Frontend
კამელკეისიდან snake_case-ის გარდაქმნის ფუნქციის დაწერა. რეგულარული გამოთქმების, სიმბოლოების კოდების ან მკაცრად განსაზღვრული სიმბოლოების სიების გამოყენება აკრძალულია; გადაწყვეტილება უნდა იყოს უნივერსალური. შეაფასეთ დროისა და სივრცის სირთულე.
რატომ როდესაც ორი გამოძახება ხდება sleep(2000) და sleep(1000), პირველ რიგში ჩანს 1 წამის ლოგი, ხოლო შემდეგ 2-ის? ახსენით Event Loop-ის, მიკრო და მაკრო-ტასკების მუშაობა.
მონაცემთა ბაზების ცოდნა და API-თან მუშაობა
/* ჩვენ გვაქვს ბილეთების ნაკადი შემდეგი ფორმატით: [ { 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: 'სანტ პეტერბურგი' }, ] */
/** * `asyncAuth(callback)` ფუნქცია იღებს callback-ს, რომელშიც * შეიძლება გადაეცეს შეცდომა (პირველი არგუმენტით) და მონაცემები * ბექენდიდან (მეორე არგუმენტით). * asyncAuth((error, data) => {}); * * თქვენ უნდა განახორციელოთ `auth()` ფუნქცია, * რომელიც იძახის `asyncAuth()`, მაგრამ აბრუნებს Promise-ს. * * @returns {Promise} */ function auth() { // asyncAuth((error, data) => {}); } /** * `tryAuth()` ფუნქცია იყენებს `auth()`-ს და, შეცდომის შემთხვევაში, * აკეთებს N დამატებით მცდელობას. * თუ ყველა მცდელობა წარუმატებელია, აბრუნებს ბოლო შეცდომას. * * @returns {Promise} */ function tryAuth(n) { }
/** * '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); }); }
ვინაიდან თქვენი კომერციული გამოცდილების დროს რა სხვა რამეზე გიწევდათ დაწერა, გარდა TypeScript და JavaScript-ის?
თუ ჩვენ უნდა გავითვალისწინოთ ფრაქციული რიცხვები, რა უნდა დავამატოთ მეთოდს times?
/* Array.prototype.some-ის polyfill-ის დაწერა აუცილებელია პარამეტრები - 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; }
რომელი გუნდში მუშაობთ და რომელ პროექტზე?
შესაძლებელია თუ არა ვადების ჯამის ამოცანის გადაწყვეტა Promise-ის სტატიკური მეთოდების გამოყენების გარეშე? როგორ განსხვავდება ვადების შესრულება ციკლში Promise.all-ისგან — პარალელურად თუ თანმიმდევრობით?
ხე არსებობს, რომელზეც სოკო და ყვავილები ზის. საჭიროა დაწეროთ ფუნქცია, რომელიც იპოვის ყველა სოკოს ხეზე და დააბრუნებს მათ სახელებს. გ_expected შედეგი: ['Acorn', 'Sirsalty', 'Macadamia', 'Kernel'].
შექმენით callLimit(fn, limit, callback) დეკორატორი, რომელიც შეზღუდავს ფუნქციის გამოძახების რაოდენობას. მიიღებს: დეკორაციისთვის ფუნქციას, მაქსიმალურ გამოძახების რაოდენობას, callback-ს, რომელიც გამოიძახება ბოლო გამოძახებაზე (სურვილისამებრ). დაბრუნებული ფუნქციას უნდა ჰქონდეს reset მეთოდი, რომელიც აღადგენს გამოთვლას საწყის მდგომარეობაში.
Sleep, დროის ზომები, Promise და დავალებების რიგები მაგალითში კონსოლში გამოსატანი სია და გაზომილი დროის მნიშვნელობები განსაზღვრეთ; ახსენით, რატომ შეიძლება რეალური დაგვიანება იყოს მითითებულზე მეტი.
რისი უკეთესია გასაღებით მონაცემების შენახვა: Map თუ ჩვეულებრივი ობიექტი? რა სარგებელი აქვს Map-ს?
/** * აუცილებელია დაწეროთ ასინქრონული ფუნქცია, * რომელიც გაათენებს მითითებულ მილიწამებს, * და შემდეგ წარმატებით დასრულდება */ function sleep(duration) { } // მაგალითი const startTime = Date.now(); console.log("ძილი იწყება..."); sleep(2000).then(() => { console.log("გათენდა 2 წამში!"); console.log("გავლილი დრო: ", Date.now() - startTime); }); sleep(1000).then(() => { console.log("გათენდა 1 წამში!"); console.log("გავლილი დრო: ", Date.now() - startTime); });
/** * runOnce სახელწოდების ორმაგი ფუნქციის განხორციელება, რომელიც * იღებს ფუნქციას და აბრუნებს ახალ ფუნქციას. ახალი * ფუნქცია შეიძლება გამოიძახოს მხოლოდ ერთხელ, ყველა შემდეგი * გამოძახება აბრუნებს undefined-ს. * * ჩასმული ფუნქცია შეიძლება მიიღოს არგუმენტები * და დაბრუნდეს შედეგი. */ function runOnce(fn) { // თქვენი კოდი } const logHello = (name) => { console.log(`გამარჯობა, ${name}!`) }; const logHelloOnce = runOnce(logHello); console.clear(); logHelloOnce('Oleg'); // 'გამარჯობა, Oleg!' logHelloOnce('Olga'); // undefined
გააფართოეთ Array.prototype მეთოდით, რომელიც ჯგუფավորում է მასივის ელემენტებს გადაცემული ფუნქციით გამოთვლილი გასაღებით და აბრუნებს ობიექტს, სადაც თითოეულ გასაღებას შესაბამისი ელემენტების მასივი უჭირავს. ახსენით, რა მოხდება, თუ გასაღების გამოთვლის ფუნქცია რაიმეს დააბრუნებს, რაც არ არის სტრიქონი ან რიცხვი.
// გეცოდინებათ, რომ გაცემული სტრიქონი ლათინური ასოებით, სივრცეებითა და ნიშანშესანიშნაობებით არის შედგენილი. // სტრიქონს უწოდებენ პანგრამას, თუ ის შეიცავს ყოველ 26 ასოს მინიმუმ ერთხელ. განსაზღვრეთ, არის თუ არა სტრიქონი პანგრამა. const LETTERS = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']; function isPangram(text) { // თქვენი კოდი აქ } 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.'))