Я хочу преобразовать "['2022-03-24', '2022-03-25']"
в данные массива javascript из element.dataset
сделал const dateRange = JSON.stringify("['2022-03-24', '2022-03-25']")
JSON.parse(dateRange)
возвращает ['2022-03-24', '2022-03-25']
, который является строкой, а не массивом JavaScript.
Я хочу заполнить диапазон дат flatpickr
объектом из моей базы данных, поэтому я передаю HTML-элемент даты через атрибут данных <input type = "date" class = "date-range" data-date = "{{date_range}}" />
Нет; использование синтаксического анализа непосредственно на нем вызывает эту ошибку VM24785: 1 Uncaught SyntaxError: Unexpected token 'в JSON в позиции 1 в JSON.parse (<анонимный>) в (индекс): 531:30 в NodeList.forEach (<анонимный>) в flatpickrDate ((индекс):530:19) в (индекс):541:5
Как я уже сказал, сначала убедитесь, что он действителен (двойные кавычки, а не одиночные вокруг элементов массива). См. также: Кодирование JSON со строками в атрибутах данных html
также: Использование JSON в шаблоне django
Попробуйте это, это оставит вас с массивом строк дат, попробуйте проанализировать их на даты сейчас (если вам нужно).
someString.replace(/[',\]\[]/g, '').split(' ')
Страшное регулярное выражение на помощь.
Вы можете использовать объект Function()
для создания экземпляра функции, которая будет возвращать массив. Вторая строка ниже создает анонимную функцию, которая затем немедленно вызывается через ()
.
const arrString = "['2022-03-24', '2022-03-25']";
const arr = (new Function(`return ${arrString}`))();
console.info( arr );
ДЕМО
const arrString = "['2022-03-24', '2022-03-25']";
const arr = (new Function(`return ${arrString}`))();
console.info( arr );
сделайте исходную строку допустимой JSON (используйте двойные кавычки), а затем просто проанализируйте ее.
JSON.parse('["2022-03-24", "2022-03-25"]')