Однотипные функции

99
11 марта 2021, 10:00

В коде ниже представлена одна из множества однотипных функций. Нужно объединить их в одну и сделать задаваемым как параметр номер функции (в коде это цифра 21), основная проблема в этом. То есть вместо 21 нужен динамичный параметр, задаваемый при вызове функции (например achnew(21)).

function achnew21() {
if (ach21 === 0) {
    let x = document.getElementById("achnew21");
    let p = Da;
    p = Math.floor(p);
    if (p >= 100) {
        p = 100;
        x.textContent = "Выполнено - " + p + "%";
        if (ach21 === 0) {
            document.getElementById("Da").textContent = "x" + Da;
            ach21 += 1;
        };
    }
    else document.getElementById("achnew21").textContent = p + "%";
    x.style.width = p + "%";
}
else {
    let y = document.getElementById("achvmntbg21");
    y.style.background = "#f7f7ff";
    let x = document.getElementById("achnew21");
    x.style.width = 100 + "%";
    document.getElementById("achnew21").textContent = "Выполнено - 100%";
}

}

Answer 1

Доступ к глобальным переменным можно получить через объект window:

function achnew(i) {
  if (window[`ach${i}`] === 0) {
...
Answer 2

Ну я в таких ситуациях пробовал через eval делать, но что-то мне подсказывает что это говнокод будет) К примеру:

for(let i = 1; i<=21; i++) {
 eval("function achnew"+i+"() {if (ach"+i+" === 0) {let x = document.getElementById('achnew"+i+"'); let p = Da; p = Math.floor(p);if (p >= 100) { p = 100; x.textContent = 'Выполнено - ' + p + '%';if (ach"+i+" === 0) {document.getElementById('Da').textContent = 'x' + Da; ach"+i+" += 1;};}else document.getElementById('achnew"+i+"').textContent = p + '%';x.style.width = p + '%';}else {let y = document.getElementById('achvmntbg"+i+"');y.style.background = '#f7f7ff';let x = document.getElementById('achnew"+i+"');x.style.width = 100 + '%';document.getElementById('achnew"+i+"').textContent = 'Выполнено - 100%';}}");
}

Ну или вызов функций:

for(let i = 1; i<=21; i++) {
 eval("achnew"+i+"()");
}
READ ALSO
Что не так с моим слайдером?

Что не так с моим слайдером?

Немного освоившись в JS'e и jQuery, попробовал написать свой слайдер

100
Определить является ли значение цветом

Определить является ли значение цветом

Как реализовать проверку значения на цвет HEX, RGB или RGBA системы

92