PankovAlxndr
@PankovAlxndr
Fullstack web developer

Как правильно хранить и получать из базы js массив?

Здравствуйте.
5eb1824199ea8513453681.jpeg

1) из базы приходит строка 1 (это raw запись массива на js)
2) я беру это строку и делаю split(, ), чтобы получить из строки массив, но получаю строку 2 (регулярки становятся строкой и мои строки такие как +7 обворачиваются еще в кавычки.)

скажите как мне это победить, мне для работы одного плагина на VUE нужно получать массив-маску, а элементами массива могут быть как строки так и регулярки, в базе все это строкой хранится.

вот третья строка на картинке это так как мне надо, те из 1ой строки хочу получить 3ию, но получаю 2ую.

Те мне нужно получить из базы
это
let rawMask = "['+', '7', '(', /\d/, /\d/, /\d/, ')', ' ', /\d/, /\d/, /\d/, '-', /\d/, /\d/, '-', /\d/, /\d/]" //string

и сделать так как-будто мы на js объявили так
let mask = ['+', '7', '(', /\d/, /\d/, /\d/, ')', ' ', /\d/, /\d/, /\d/, '-', /\d/, /\d/, '-', /\d/, /\d/] //array


может как-то по другому в базу записывать стоит?
  • Вопрос задан
  • 102 просмотра
Решения вопроса 1
function toStringOrRegExp(s) {
    if (s.startsWith("'") && s.endsWith("'")) {
        return s.slice(1, -1);
    }
    if (s.startsWith("/") && s.endsWith("/")) {
        try {
            const regexp = new RegExp(s.slice(1, -1));
            return regexp; 
        } catch (e) {
            return s;
        }
    }
    return s;
}

const raw = "['+', '7', '(', /\d/, /\d/, /\d/, ')', ' ', /\d/, /\d/, /\d/, '-', /\d/, /\d/, '-', /\d/, /\d/]";
const arr = raw.slice(1, -1).split(', ').map(toStringOrRegExp);

console.log(arr);
// ["+", "7", "(", /d/, /d/, /d/, ")", " ", /d/, /d/, /d/, "-", /d/, /d/, "-", /d/, /d/]
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@StockholmSyndrome
как вариант
const result = mask.map((s) => 
  s.startsWith('/') && s.endsWith('/') ? new RegExp(s.slice(1, -1)) : s);
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
21 нояб. 2024, в 23:30
300000 руб./за проект
21 нояб. 2024, в 22:21
3000 руб./в час
21 нояб. 2024, в 21:42
100000 руб./за проект