Написать отчества которые должны генерироваться от мужских имен
Здравствуйте, мне нужно чтобы отчества генерировались от мужских имен, я пытался что-то писать, много перепробовал вариантов, но код не хочет работать, было бы супер если бы вы помогли мне с этим:thanks: https://sun9-42.userapi.com/impg/R4G...e4a&type=album
https://sun9-22.userapi.com/impg/Eis...0d8&type=album |
MANDOSAN, скриншоты это хорошо. Но вы для начала здесь напишите тот код, который пытались реализовать. Запишите его в тегах [JS]))
Чтобы участники форума могли от чего-то отталкиваться) |
Что то типа такого приходит на ум
const tabSurname = [ ['(.*)(аил)$', [1, 'айлович'], [1, 'айловна']], ['(.*)(ей)$', [1, 'еевич'], [1, 'еевна']], ['(.*)(ай)$', [1, 'аевич'], [1, 'аевна']], ['(.*)(ий)$', [1, 'ьевич'], [1, 'ьевна']], ['(.*)([аеиоуэюя])$', [1, 'ич'], [1, 'ична']], ['(.*)$', [1, 'ович'], [1, 'овна']], ] const genSurname = (mask, ...pars) => { return mask.reduce ((a, v) => a + (typeof v === 'number' ? pars[v] : v), ''); } const getSurname = (name) => { let maleSurname, femaleSurname; name = name.toLowerCase(); for (const sn of tabSurname) { const re = new RegExp(sn[0]); if (name.match(re)) { maleSurname = name.replace(re, (...pars) => genSurname(sn[1], ...pars)); femaleSurname = name.replace(re, (...pars) => genSurname(sn[2], ...pars)); maleSurname = maleSurname[0].toUpperCase() + maleSurname.slice(1); femaleSurname = femaleSurname[0].toUpperCase() + femaleSurname.slice(1); break; } } return [maleSurname, femaleSurname] } let name, msname, fmsname; while (true) { name = prompt('Имя') if (! name ) break; [msname, fmsname] = getSurname (name); alert (msname + ' ' + fmsname); } Лень перебирать все имена, но всегда можно добавить в таблицу другое правило или исключение. ЗЫ У меня prompt почему то срабатывает только, если открыт DevTools |
const mon = Math.floor(Math.random() * 3); const personGenerator = { surnameJson: `{ "count": 15, "list": { "id_1": "Иванов", "id_2": "Смирнов", "id_3": "Кузнецов", "id_4": "Васильев", "id_5": "Петров", "id_6": "Михайлов", "id_7": "Новиков", "id_8": "Федоров", "id_9": "Кравцов", "id_10": "Николаев", "id_11": "Семёнов", "id_12": "Славин", "id_13": "Степанов", "id_14": "Павлов", "id_15": "Александров", "id_16": "Морозов" } }`, firstNameMaleJson: `{ "count": 10, "list": { "id_1": "Александр", "id_2": "Максим", "id_3": "Иван", "id_4": "Артем", "id_5": "Дмитрий", "id_6": "Никита", "id_7": "Михаил", "id_8": "Даниил", "id_9": "Егор", "id_10": "Андрей", "id_11": "Марат" } }`, firstNameFemaleJson: `{ "count": 10, "list": { "id_1": "Мария", "id_2": "Анна", "id_3": "Полина", "id_4": "Елена", "id_5": "Наталья", "id_6": "Ольга", "id_7": "Светлана", "id_8": "Юлия", "id_9": "Людмила", "id_10": "Татьяна", "id_11": "Оксана" } }`, professionMaleJson: `{ "count": 10, "list": { "id_1": "Сантехник", "id_2": "Пожарный", "id_3": "Полицейский", "id_4": "Военный", "id_5": "Строитель", "id_6": "Инженер", "id_7": "Режисер", "id_8": "Летчик", "id_9": "Электрик", "id_10": "Программист" } }`, professionFemaleJson: `{ "count": 10, "list": { "id_1": "Медсестра", "id_2": "Няня", "id_3": "Учительница", "id_4": "Бухгалтер", "id_5": "Парикмахер", "id_6": "Косметолог", "id_7": "Визажист", "id_8": "Дизайнер", "id_9": "Актриса", "id_10": "SMM – менеджер" } }`, GENDER_MALE: 'Мужчина', GENDER_FEMALE: 'Женщина', randomGender: function () { return Math.floor (Math.random()*2) == 1 ? this.GENDER_MALE : this.GENDER_FEMALE; }, randomIntNumber: (max = 1, min = 0) => Math.floor(Math.random() * (max - min + 1) + min), randomValue: function (json) { const obj = JSON.parse(json); const prop = `id_${this.randomIntNumber(obj.count, 1)}`; // this = personGenerator return obj.list[prop]; }, randomFirstName: function() { if (this.person.gender == this.GENDER_MALE) { return this.randomValue(this.firstNameMaleJson); } else { return this.randomValue(this.firstNameFemaleJson); } }, randomSurname: function() { if (this.person.gender == this.GENDER_MALE) { return this.randomValue(this.surnameJson); } else { return this.randomValue(this.surnameJson) + "a"; } }, randomBirthYear: function (min,max) { min = 1950; max = 2000; return Math.floor(Math.random() * (max - min + 1)) + min; }, randomProfession: function () { if (this.person.gender == this.GENDER_MALE) { return this.randomValue(this.professionMaleJson); } else { return this.randomValue(this.professionFemaleJson); } }, randomPatronymic: function() { }}, randomMonth31: function randomMonth() { let months = [`января`, `марта`, `мая`, `июля`, `августа`, `октября`, `декабря`]; let month = months[Math.floor(Math.random() * 7)]; return month; }, randomMonth30: function randomMonth() { let months = [`апреля`, `июня`, `сентября`, `ноября`]; let month = months[Math.floor(Math.random() * 4)]; return month; }, randomMonthFeb28: function randomMonth() { let month = `февраля` return month; }, getPerson: function () { this.person = {}; this.person.gender = this.randomGender(); this.person.surname = this.randomSurname(); this.person.firstName = this.randomFirstName(); this.person.birthYear = this.randomBirthYear(); this.person.profession = this.randomProfession(); this.person.patronymic = this.randomPatronymic(); if (mon === 0) { this.person.month = this.randomMonth31(); this.person.day = this.randomIntNumber(1, 31); } else if (mon === 1) { this.person.month = this.randomMonth30(); this.person.day = this.randomIntNumber(1, 30); } else if (mon === 2) { this.person.month = this.randomMonthFeb28(); this.person.day = this.randomIntNumber(1, 28); } return this.person; } }; Вот весь код, мне нужно что в randomPatronymic генерировались отчества рандомно, плюс минус похожее на то что сверху. |
Ну возьмите мой код и приспособьте для своих нужд. Способ то генерации отчества по имени понятен.
Я ваш код писать не могу, т.к не могу тестировать его. |
Часовой пояс GMT +3, время: 07:26. |