Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.06.2023, 02:29
Новичок на форуме
Отправить личное сообщение для MANDOSAN Посмотреть профиль Найти все сообщения от MANDOSAN
 
Регистрация: 09.06.2023
Сообщений: 2

Написать отчества которые должны генерироваться от мужских имен
Здравствуйте, мне нужно чтобы отчества генерировались от мужских имен, я пытался что-то писать, много перепробовал вариантов, но код не хочет работать, было бы супер если бы вы помогли мне с этим https://sun9-42.userapi.com/impg/R4G...e4a&type=album

https://sun9-22.userapi.com/impg/Eis...0d8&type=album
Ответить с цитированием
  #2 (permalink)  
Старый 09.06.2023, 07:59
Аватар для webgraph
Профессор
Отправить личное сообщение для webgraph Посмотреть профиль Найти все сообщения от webgraph
 
Регистрация: 14.11.2014
Сообщений: 186

MANDOSAN, скриншоты это хорошо. Но вы для начала здесь напишите тот код, который пытались реализовать. Запишите его в тегах [JS]))

Чтобы участники форума могли от чего-то отталкиваться)
Ответить с цитированием
  #3 (permalink)  
Старый 09.06.2023, 09:07
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,701

Что то типа такого приходит на ум
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.
Ответить с цитированием
  #4 (permalink)  
Старый 09.06.2023, 14:27
Новичок на форуме
Отправить личное сообщение для MANDOSAN Посмотреть профиль Найти все сообщения от MANDOSAN
 
Регистрация: 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 генерировались отчества рандомно, плюс минус похожее на то что сверху.
Ответить с цитированием
  #5 (permalink)  
Старый 09.06.2023, 17:59
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,701

Ну возьмите мой код и приспособьте для своих нужд. Способ то генерации отчества по имени понятен.
Я ваш код писать не могу, т.к не могу тестировать его.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Модуль для работы с модулями JSprog Ваши сайты и скрипты 29 02.09.2009 13:31