попалась интересная задача по js , кто шарит
Массив строк клавиатуры преобразовать в объект keyboard следующего формата.
const keyboard = { layouts: { en: { topRow: [], middleRow: [], bottomRow: [] }, ru: { topRow: [], middleRow: [], bottomRow: [] }, ua: { topRow: [], middleRow: [], bottomRow: [] } }, langs: ['en', 'ru', 'ua'], currentLang: '' }; Написать скрипт который на старте спрашивает пользователя какой язык он хочет использовать на тренажере. Это обычный prompt в котором написано en-0, ru-1, ua-2. Пользователь вводит 0, 1 или 2, если введено другое значение то вывести alert о том что был выбран не доступный язык и повторить prompt до того момента пока не будет введено подходящее значание языка или нажат cancel. При cancel прекратить выполнение скрипта. Результат выбора языка пользователем записать в обьект keyboard в поле currentLang как строку, 0 это en, 1 это ru, 2 это ua. Модифицировать функцию getRandCharInAlph() так, чтобы она возвращала случайную букву из выбраного пользователем алфавита. |
А что в задаче интересного?
|
Цитата:
|
ksa, похоже на то :)
//Вероятно самая сложная часть скрипта var lang=-1; while(lang!==null && [0,1,2].indexOf(+lang)==-1) lang=prompt('Choose language (0-2)',0); if(lang===null) return; console.log(lang); |
Nexus,
я в этой задаче знаю только массив массивов клавиатурных строк как сделать , дальше полный ноль(( |
Cfifsasaasas, ну так заполните массив.
Как предложить пользователю выбрать язык я уже написал, чутка его допилить и подойдет под условия вашей задачи. Функция "getRandCharInAlph" - строка кода. |
Nexus,
Допилить звучит страшно(:) |
Цитата:
http://javascript.ru/forum/misc/7233...tml#post475959 |
Dilettante_Pro,
ну вот есть код и его надо дополнить по сути let kb = { elements: document.getElementsByTagName('li'), strEn: "qwertyuiop[]asdfghjkl;'zxcvbnm,./", strRu: "йцукенгшщзхъфывапролджэя смитьбю.", strUa: "йцукенгшщзхїфівапролджєя смитьбю.", language: ['strEn', 'strRu', 'strUa'], current: "strEn", fillKb(lang) { let li = [...this.elements]; //подставить li.map((elem, i) => elem.textContent = this[lang][i]); }, changeCurrent(num) { if(Number.isInteger(num)) { let digit = num > 0 ? num : -num; let n = digit % 3; // подставить this.current = this.language[num]; } else { this.current = "strEn"; console.log("Введите число от 0 до 2-х"); } } } function run () { kb.fillKb(kb.current); }; run(); function go(){ // prompt let num = 2; kb.changeCurrent(num); } go(); run(); |
Cfifsasaasas,
Пожалуйста, отформатируйте свой код! Для этого его можно заключить в специальные теги: js/css/html и т.п., например: [js] ... ваш код... [/js] О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting. |
Nexus,
ok |
Nexus,
let kb = { elements: document.getElementsByTagName('li'), strEn: "qwertyuiop[]asdfghjkl;'zxcvbnm,./", strRu: "йцукенгшщзхъфывапролджэя� �смитьбю.", strUa: "йцукенгшщзхїфівапролджєя� �смитьбю.", language: ['strEn', 'strRu', 'strUa'], current: "strEn", fillKb(lang) { let li = [...this.elements]; //подставить li.map((elem, i) => elem.textContent = this[lang][i]); }, changeCurrent(num) { if(Number.isInteger(num)) { let digit = num > 0 ? num : -num; let n = digit % 3; // подставить this.current = this.language[num]; } else { this.current = "strEn"; console.log("Введите число от 0 до 2-х"); } } } function run () { kb.fillKb(kb.current); }; run(); function go(){ // prompt let num = 2; kb.changeCurrent(num); } go(); run(); |
Nexus,
на самом деле реально не ясно только вот это что за строки и что они делают, я нашел готовый вариант , хочу знать что тут пишет changeCurrent(num) { if(num === 0 || num === 1 || num === 2) { keyboard.currentLang = keyboard.langs[num]; console.log(`Язык - ${keyboard.currentLang}`); } else { console.log('Выбран недоступный язык'); while(num !== 0 || num !== 1 || num !== 2) { num = prompt("Выбери язык на тренажере", "en-0, ru-1, ua-2"); } } }, getRandCharInAlph(num) { if (keyboard.currentLang === keyboard.langs[num]) { let lans = Object.keys(keyboard.layouts[keyboard.langs[num]]); let lan = lans.map(key => keyboard.layouts[keyboard.langs[num]][key]); lan = lan[0].concat(lan[1]).concat(lan[2]); let keyboardRandom = lan.replace(/[^a-zа-яїіє]/gi).replace(/\s+/gi,', ').charAt(Math.random() * lan.length); console.log(`Случайная буква - ${keyboardRandom}`); } |
"changeCurrent" - метод объекта, принимает 1 аргумент - "num" (тип - integer), проверяет валидность данных и сохраняет текущий язык.
В строке 2 проверяется является ли "num" числом от 0 до 2. Если да, то язык сохраняется (стр. 3) и выводится уведомление в консоль (4). В противном случае выводится уведомление об ошибке в консоль (7) и скрипт пытается узнать у пользователя, какой язык он предпочитает (9). Скрипт будет вести допрос, пока пользователь не введет корректные данные (8). По методу "getRandCharInAlph" нужно знать, что есть в свойстве "layouts" объекта "keyboard". |
Nexus,
ОГРОМНОЕ СПАСИБО |
Часовой пояс GMT +3, время: 02:37. |