@PinBib

Почему обрабатывается только оди элемент массива?

почему обрабатывается только первый элемент массива?
const fs = require("fs");
const path = require("path");
const { log } = require("console");
const arg = process.argv;

const mainpath = path.join(__dirname, arg[2]);

if (!/\\$/gm.test(mainpath)) {
    const file = fs.readFileSync(mainpath, { encoding: "utf-8" });
    let variable = {};

    function createVar(id, value) {
        if (value == "none") {
            variable[id] = "void";
        } else {
            variable[id] = value;
        }
    }

    let linelist = file.replace(/^\s+/gm, "").split(";");

    for (var i = 0; i < linelist.length; i++) {
        let line = linelist[i].split(" ");

        switch (line[0]) {
            case "approve":
                let name = line[1];
                if (line[2] == undefined) {
                    createVar(name, "none")
                } else {
                    let type = line[3];

                    if (type == "Int") {
                        createVar(name, eval(line.slice(4).join(" ")));
                    } else if (type == "String") {
                        createVar(name, line.slice(4).join(" ").replace(/['"]/gm, ""));
                    } else if (type == "Array") {
                        createVar(name, line.slice(4).join(" ").replace(/[\[\]"']/gm, "").split(","));
                    } else if (type == "Object") {
                        createVar(name, JSON.parse(line.slice(4).join(" ")));
                    }
                }
                break;
        }
    }

    log(linelist)
    log(variable)
} else {
    const filelist = fs.readdirSync(mainpath);
};

читаемый файл:
approve msg = Int 23;
approve ms = String "kivjlse"

Я думал что это иза того что обрабатывается только один case но нет , думал что break в switch-case останавливает весь цикл попробовал через if не помогло , в чём может быть ошибка?
  • Вопрос задан
  • 109 просмотров
Решения вопроса 1
@5465
Проблема заключается в том, что вы используете метод eval() для вычисления значений в строке, содержащей массив. Когда вы используете eval(), он оценивает только первый элемент в строке, поэтому вам необходимо использовать метод JSON.parse() для правильного преобразования строки в массив.

Замените этот код:

createVar(name, line.slice(4).join(" ").replace(/[\[\]"']/gm, "").split(","));


на этот:

createVar(name, JSON.parse(line.slice(4).join(" ")));


Это должно правильно преобразовать строку в массив, а затем сохранить его в переменной variable.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы