09.06.2023, 07:59
|
|
Профессор
|
|
Регистрация: 14.11.2014
Сообщений: 186
|
|
MANDOSAN, скриншоты это хорошо. Но вы для начала здесь напишите тот код, который пытались реализовать. Запишите его в тегах [JS]))
Чтобы участники форума могли от чего-то отталкиваться)
|
|
09.06.2023, 09:07
|
|
Профессор
|
|
Регистрация: 03.02.2020
Сообщений: 2,745
|
|
Что то типа такого приходит на ум
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
Последний раз редактировалось voraa, 09.06.2023 в 18:17.
|
|
09.06.2023, 14:27
|
Новичок на форуме
|
|
Регистрация: 09.06.2023
Сообщений: 2
|
|
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 генерировались отчества рандомно, плюс минус похожее на то что сверху.
|
|
09.06.2023, 17:59
|
|
Профессор
|
|
Регистрация: 03.02.2020
Сообщений: 2,745
|
|
Ну возьмите мой код и приспособьте для своих нужд. Способ то генерации отчества по имени понятен.
Я ваш код писать не могу, т.к не могу тестировать его.
|
|
|
|