Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   попалась интересная задача по js , кто шарит (https://javascript.ru/forum/misc/72389-popalas-interesnaya-zadacha-po-js-kto-sharit.html)

Cfifsasaasas 25.01.2018 17:38

попалась интересная задача по 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() так, чтобы она возвращала случайную букву из выбраного пользователем алфавита.

Nexus 25.01.2018 23:00

А что в задаче интересного?

ksa 26.01.2018 08:41

Цитата:

Сообщение от Nexus
А что в задаче интересного?

Ты видать не шаришь... :D

Nexus 26.01.2018 09:34

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);

Cfifsasaasas 26.01.2018 09:52

Nexus,
я в этой задаче знаю только массив массивов клавиатурных строк как сделать , дальше полный ноль((

Nexus 26.01.2018 10:17

Cfifsasaasas, ну так заполните массив.
Как предложить пользователю выбрать язык я уже написал, чутка его допилить и подойдет под условия вашей задачи.
Функция "getRandCharInAlph" - строка кода.

Cfifsasaasas 26.01.2018 10:21

Nexus,
Допилить звучит страшно(:)

Dilettante_Pro 26.01.2018 10:49

Цитата:

Сообщение от Nexus
Функция "getRandCharInAlph" - строка кода

Тем более, она уже была
http://javascript.ru/forum/misc/7233...tml#post475959

Cfifsasaasas 26.01.2018 10:52

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();

Nexus 26.01.2018 10:54

Cfifsasaasas,
Пожалуйста, отформатируйте свой код!

Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[js]
... ваш код...
[/js]


О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.

Cfifsasaasas 26.01.2018 11:28

Nexus,
ok

Cfifsasaasas 26.01.2018 11:49

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();

Cfifsasaasas 26.01.2018 11:53

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}`);
        }

Nexus 26.01.2018 12:06

"changeCurrent" - метод объекта, принимает 1 аргумент - "num" (тип - integer), проверяет валидность данных и сохраняет текущий язык.
В строке 2 проверяется является ли "num" числом от 0 до 2.
Если да, то язык сохраняется (стр. 3) и выводится уведомление в консоль (4).
В противном случае выводится уведомление об ошибке в консоль (7) и скрипт пытается узнать у пользователя, какой язык он предпочитает (9).
Скрипт будет вести допрос, пока пользователь не введет корректные данные (8).

По методу "getRandCharInAlph" нужно знать, что есть в свойстве "layouts" объекта "keyboard".

Cfifsasaasas 26.01.2018 14:29

Nexus,
ОГРОМНОЕ СПАСИБО


Часовой пояс GMT +3, время: 02:37.