Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.09.2019, 21:07   #1
Gronik
Форумчанин
 
Аватар для Gronik
 
Регистрация: 02.10.2018
Сообщений: 107
По умолчанию функции в Map на js

Доброго времени суток уважаемые форумчане!
Подскажите пожалуйста, есть ли решение следующей проблемы и если есть то какое:
Есть необходимость по определенному условию вызывать определенную фун-ю на js. Придумал создать коллекцию Мар следующего вида:
Код:
let AA= new Map([['142','fone()'],['143','ftwoo()],['144','fthree()'],....['166','ftwenty()']]);
Затем пытаюсь вызвать нужную фун-ю по коду:
Код:
AA.get(kod);
Функция не запускается. Алертом слово ftwenty() выводит.
Ну понятно, надеюсь, что kod получается определенными действиями и в конце принимает значение одного из ключей.
Можно, конечно через if.... Но функций около 20 штук....
Вопрос:
1. Можно ли в принципе так делать?
2. Что вообще можно сделать?

С уважением
И надеждой на помощь.........
С уважением
Gronik
Gronik вне форума Ответить с цитированием
Старый 12.09.2019, 22:58   #2
Naive
Раздолбайских Дел
Старожил
 
Аватар для Naive
 
Регистрация: 22.05.2009
Сообщений: 3,828
По умолчанию

1. можно. Задавай значением не строку, а ссылку на функцию, тогда вызовешь её по
Код:
AA.get(kod)();
//         ^ — тут ты вызываешь функцию. Строку ты так вызвать не сможешь *1
2. Почитай learn.javascript.ru, самые азы. Там очень кратко, и очень ёмко все рассказано. Спасибо Илье Кантору.

1. "АА" будет объектом, так что let к нему применять не правильно, юзай const.
2. "АА" — так не именуют переменные и константы. Пиши осознанные имена.
3. "kod" — не пиши транслитом, залезай в гугло/яндекс переводчик и ищи подходящее имя для переменной. Тут бы подошло "code".
4. "fone, ftwoo, fthree, ftwenty" — отделяй префикс. В случае названий функций принято использовать lowerCamelCase-синтаксис. То есть первая буква первого слова маленькая, остальные слова начинаются с большой буквы.

*1. На самом деле можно так сделать, но с твоими знаниями тебе это рано знать. Я не дам ядерную бомбу в руки новичка. Когда ты изучишь то, что я тебе и так дал, сам разберешься, что это тебе не нужно и почему это было бы плохим решением.
Удачи =)
Alar, верни репу!
Naive вне форума Ответить с цитированием
Старый 26.09.2019, 10:23   #3
Gronik
Форумчанин
 
Аватар для Gronik
 
Регистрация: 02.10.2018
Сообщений: 107
По умолчанию

Решение найдено.
Большое спасибо Naive, за указания на недостатки! Учел. Внимательнее почитал здесь: https://learn.javascript.ru/intro. Спасибо Илье Кантору!!!! Результат с учетом критики. Это работает:
Код:
const result={'141': fOne, '142': fTwoo, '143': fThree,.......'166': fTwenty,};
Теперь вызываю нужную функцию по коду:

result[code]();

Естетственно, прежде чем оперировать ссылками на функции - функции надо бы определить.
И последнее, извините Naive! Но все же это мне нужно...... Пока так думаю....
С уважением
Gronik

Последний раз редактировалось Вадим Мошев; 26.09.2019 в 10:45.
Gronik вне форума Ответить с цитированием
Старый 26.09.2019, 10:40   #4
Naive
Раздолбайских Дел
Старожил
 
Аватар для Naive
 
Регистрация: 22.05.2009
Сообщений: 3,828
По умолчанию

Цитата:
Сообщение от Gronik Посмотреть сообщение
Но все же это мне нужно...... Пока так думаю....
Нет, не нужно
Ты сделал все правильно. 1 со звездочкой относилось к твоему первому сообщению, мол так сделать можно, но лучше не стоит.
Alar, верни репу!
Naive вне форума Ответить с цитированием
Старый 27.09.2019, 09:59   #5
Gronik
Форумчанин
 
Аватар для Gronik
 
Регистрация: 02.10.2018
Сообщений: 107
По умолчанию

Naive!!!
Вы интересный человек!!!! Вы лучше меня знаете что мне нужно...Хотя...учитывая Ваш опыт...
Попробую убедить прежде всего себя.
Альтернативу приведенного выше кода с настоящими именами функций, я вижу только так:
Код:
if(code==141){fSalad()};
if(code==142){fSnack()};
....................
if(code==166){fHelth()};
Каждая функция - отдельный файл. Функция выводит на панель админа выпадающий список названий соответствующих заголовков, для возможности выбора и дальнейшего редактирования, как самого заголовка так и текста этого заголовка.(Форму для изменения формирую php программой). Перечень заголовков содержится прямо в тексте функции. В дальнейшем планирую php менять(добавлять) заголовки прямо в файле соответствующей функции.
Если Вы знаете другое решение - буду очень благодарен.
С уважением
Gronik

Последний раз редактировалось Gronik; 27.09.2019 в 10:04.
Gronik вне форума Ответить с цитированием
Старый 30.09.2019, 19:27   #6
Naive
Раздолбайских Дел
Старожил
 
Аватар для Naive
 
Регистрация: 22.05.2009
Сообщений: 3,828
По умолчанию

Цитата:
Сообщение от Gronik Посмотреть сообщение
Вы интересный человек!!!! Вы лучше меня знаете что мне нужно...
В программировании существуют 2 таких интересных понятия, как лучшие практики (best practices) и плохие практики (bad practices). Создание туевы хучи глобальных переменных, а к этому ведет вопрос про 1*, является плохой практикой, так как нарушает один из базовых принципов программирования — инкапсуляцию. Разумеется, избежать этой практики не всегда возможно. Но где можно, этим надо пользоваться. К примеру, существует такая техника, как JSONP, в ней невозможно обойтись без создания глобальных функций. Но во-первых имя функции там хешируется, так что возможность повтора скидывается к шансу 1 на 64 миллиона, и во-вторых проверяется возможность повтора. И соответственно все это укладывается в самый далекий блэкбокс, до куда обычный пользователь библиотек врят ли когда-нибудь вообще доберется. В данном случае я говорю про jQuery или про полифилы метода fetch.

Цитата:
Сообщение от Gronik Посмотреть сообщение
Альтернативу приведенного выше кода с настоящими именами функций, я вижу только так:
Код:
if(code==141){fSalad()};
if(code==142){fSnack()};
....................
if(code==166){fHelth()};
Почему нельзя написать одну функцию, которая бы в зависимости от кода сама выбирала что ей сделать?

Цитата:
Сообщение от Gronik Посмотреть сообщение
Каждая функция - отдельный файл.
советую присмотреться к технологии webpack.

Цитата:
Сообщение от Gronik Посмотреть сообщение
Функция выводит на панель админа выпадающий список названий соответствующих заголовков, для возможности выбора и дальнейшего редактирования, как самого заголовка так и текста этого заголовка.(Форму для изменения формирую php программой).
тогда в чем отличия между функциями, если меняются только списки?

Цитата:
Сообщение от Gronik Посмотреть сообщение
Если Вы знаете другое решение - буду очень благодарен.
Выдавай из пыха списки, в виде JSON. Попробуй jQuery.ajax — как самое простое решение для новичка. Если осилишь webpack, то он самостоятельно тебе заполифилит fetch. Это со стороны фронтенда. Со стороны бэка тебе нужно будет выдавать только список в формате JSON. Когда я был фуллстэком и писал всякую мелочь на PHP, именно так и поступал.
Alar, верни репу!
Naive вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функции в языке С. Передача параметров в функции. Создание многофайловых проектов fifaman Общие вопросы C/C++ 6 28.12.2014 15:30
Табулирование заданной функции и определение максимального и минимального значения функции в таблице Марина1986 C/C++ Сетевое программирование 0 07.05.2013 11:31
Использование подпрограммы-функции: Вычислить значение функции (Турбо паскаль) RealUnited Паскаль, Turbo Pascal, PascalABC.NET 1 05.12.2012 20:34
Построение графика функции, мигание(затухание) шарика в минимумах функции kas1m_rus Паскаль, Turbo Pascal, PascalABC.NET 0 27.05.2012 20:28
Как подменить адрес возврата функции func на адрес функции f используя переполнение буфера buf и функции gets dmitrii6120 Помощь студентам 6 14.11.2011 20:10