Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Помогите упростить код (https://javascript.ru/forum/misc/85651-pomogite-uprostit-kod.html)

alrosavilla 07.12.2023 08:50

Помогите упростить код
 
Здравствуйте.
Написал JS код такого рода.
Есть массив констант. Каждая содержит короткую фразу (подсказку). При клике на кнопку определенные фразы из массива вставляются в определенные дивы. Дивы помечены такими же именами как и константы из массива поэтому нужная фраза попадает в нужный див.
Я новичок и код написал кривенько. Дело в том что пришлось сделать второй массив с именами констант, и это не удобно, когда нужно добавлять новые константы.
Посмотрите, пожалуйста, может у вас будут идеи как от второго массива уйти?

export const gerAftPrep = "they normally put gerunds after prepositions";
export const presPerf = "brace yourself, it's the Present Perfect";
export const negatives = "need a special verb before not";
export const posPron = "possessive pronouns may be with you";
export const americans = "Americans often use the past simple instead of the present perfect";
export const toBe = "Check out the forms of to be";
export const prepTo = "Check out the prepositions of movement"

let tipNames = ["gerAftPrep", "presPerf", "negatives", "posPron", "americans", "toBe", "prepTo"];
let tips = [gerAftPrep, presPerf, negatives, posPron, americans, toBe, prepTo];
export function showTips()
    {   
        let elements = document.querySelectorAll('p[name]');
        elements.forEach(function(element,i)
            {
                let nameElement = element.getAttribute("name");
                tipNames.forEach(function(value, index)
                    {
                        if (value === nameElement)
                        {
                            element.textContent = tips[index];
                        }
                    }
                )
            }           
        )
    }

рони 07.12.2023 09:29

alrosavilla,
странные у вас div-ы p[name]

создайте объект и тогда никаких массивов и один цикл всего, по ключам массива.

рони 07.12.2023 09:39

alrosavilla,
<!DOCTYPE HTML>
<html>

<head>
    <title>Untitled</title>
    <meta charset="utf-8">
</head>

<body>
    <p data-name="gerAftPrep"></p>
    <p data-name="presPerf"></p>
    <p data-name="negatives"></p>
    <script>
        let tips = {
            gerAftPrep: "they normally put gerunds after prepositions",
            presPerf: "brace yourself, it's the Present Perfect",
            negatives: "need a special verb before not"
        };

        function showTips() {
            let elements = document.querySelectorAll('p[data-name]');
            elements.forEach(function(element) {
                let name = element.dataset.name;
                if (name in tips) element.textContent = tips[name];
            })
        }
        showTips()
    </script>
</body>

</html>

alrosavilla 07.12.2023 11:36

рони,
спасибо большое! Все работает, и так гораздо проще!
Див-ы странные, это правда. Просто параграфы находятся внтури див-ов, не стал об этом писать.
Не знал про dataset. Сейчас посмотрел, очень удобный инструмент.
А получается что в строке "if (name in tips) element.textContent = tips[name]" функция смотрит есть ли такое имя в объекте tips и, если есть, то в итерируемый элемент вставляется текст из объекта с таким же именем?

рони 07.12.2023 17:54

Цитата:

Сообщение от alrosavilla
А получается что в строке "if (name in tips) element.textContent = tips[name]" функция смотрит есть ли такое имя в объекте tips и, если есть, то в итерируемый элемент вставляется текст из объекта с таким же именем?

да.

alrosavilla 07.12.2023 22:19

рони, еще один вопрос.
Я сделал вторую HTML и прикрепил к ней второй js. Затем импортировал туда функцию showTips. Но она почему-то собирает data-name с первой HTML.
Я попробовал во втором js убрать showTips и просто вставил
let elements = document.querySelectorAll('p[data-name]');
console.log(elements);
Но все равно отображаются элементы с первой HTML.
Эта такая особенность dataset или я что-то мог неправильно сделать?

рони 07.12.2023 23:27

alrosavilla,
не могу подсказать, недостаточно информации.

alrosavilla 08.12.2023 11:42

Извнияюсь, я с gulp сборкой намудрил просто.
Сразу не понял и подумал что это может такая особенность dataset. А оказалось - это такая особенность, когда невнимательно код пишешь.
Спасибо большое.


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