Как использовать String.raw для переменных массива - PullRequest
0 голосов
/ 04 января 2019

У меня проблема с кодом, я определил массивы, но он содержит специальные символы, такие как /, {}, (), [], и т. Д. (Из-за открытого источника MathJax)

Массив возвращает строку без упомянутых специальных символов

PS: я читал о String.raw, но я не знаю, как использовать его в массиве такого типа. Помогите мне пожалуйста: (

var Array_QA = {
    "\Large {\lim_{x \to 2}} (5^x + 2^x + 4)" : "33",
    "\Large {\lim_{x \to 2}} \frac {x^2 - 6x + 8}{x^3 - 4}" : "0"
};

Ответы [ 2 ]

0 голосов
/ 07 января 2019

String.raw используется с литералами шаблона, новым (ish) синтаксисом ES6 для строк с интерполированными переменными, встроенными кавычками и символами новой строки и необязательным применением «тегов» (которые являются просто обратными вызовами функций, которые получают частишаблон разделяется на каждую интерполированную переменную, чтобы вернуть итоговую объединенную строку, как вам нравится).

Так что если у меня есть функция, которая обрабатывает литерал шаблона, и она называется processLiteral, то я могу сделать что-то вроде этогочтобы применить его к литералу:

processLiteral`This is a string with interpolated variables like ${someVar} and also ${otherVar}.`

В частности, String.raw предназначен для использования в качестве тега литерала шаблона и будет возвращать необработанную строку без обработки экранированных символов.Значение \n останется как \n и не станет новой строкой, \t останется как \t и не станет вкладкой и т. Д. Это происходит путем автоматического добавления косых черт перед любыми экранирующими косыми чертами, тем самым избегая их, поэтомуэто эквивалентно использованию \\n, \\t и т. д.

Так что в вашем случае, если вы хотите использовать этот метод, поскольку вы не можете поместить шаблонные литералы непосредственно в объявление ключа объекта (это нене правильно разбираться), вы бы сделали что-то вроде этого:

var Array_QA = {};
Array_QA[String.raw`\Large {\lim_{x \to 2}} (5^x + 2^x + 4)`] = "33";
Array_QA[String.raw`\Large {\lim_{x \to 2}} \frac {x^2 - 6x + 8}{x^3 - 4}`] = "0";

Тем не менее, иметь такие сложные строки как ключи объектов, вероятно, не очень хорошая идея с самого начала ... но это должно работать,Я бы посоветовал рефакторинг вашего кода, чтобы сделать это по-другому, если вы можете.

0 голосов
/ 05 января 2019

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

var Array_QA = {
    "\\Large {\\lim_{x \\to 2}} (5^x + 2^x + 4)" : "33",
    "\\Large {\\lim_{x \\to 2}} \\frac {x^2 - 6x + 8}{x^3 - 4}" : "0"
};
...