javascript есть ли способ очистить строку несколько раз чистым способом? - PullRequest
0 голосов
/ 03 февраля 2020

Я пытаюсь очистить строку JSON (которая была преобразована из объекта json), и я обнаружил, что многие люди используют для этого метод .replace (). Однако при этом мой код выглядел так:

scrape(url).then(result => {
  final = JSON.stringify(result);
  final = final.replace(/['"]+/g, "");
  final = final.replace(/[{]+/g, "");
  final = final.replace(/[}]+/g, "");
  final = final.replace(/[:]+/g, ": ");
  final = final.replace(/,+/g, ";");
  return final;
});

Хотя этот метод работает и возвращает 'final' так, как я этого хочу, он не выглядит очень эффективным, и код действительно неуклюжий. Моя конечная цель - удалить кавычки, фигурные скобки, заменить ':' на ':' и заменить все запятые на точки с запятой. Есть ли лучший / более чистый способ сделать это?

РЕДАКТИРОВАТЬ: строка ввода выглядит примерно так:

{
  '$primary': '#ea80fc',
  '$p_light': '#ffb2ff',
  '$p_dark': '#b64fc8',
  '$secondary': '#b64fc8',
  '$s_light': '#f9683a',
  '$s_dark': '#870000'
}

Ответы [ 2 ]

2 голосов
/ 04 февраля 2020

Учитывая ваши фактические данные, где после JSON.parse у вас есть следующая структура:

{
  '$primary': '#ea80fc',
  '$p_light': '#ffb2ff',
  '$p_dark': '#b64fc8',
  '$secondary': '#b64fc8',
  '$s_light': '#f9683a',
  '$s_dark': '#870000'
}

превращение этого в допустимый S CSS не требует длинной цепочки замен, примененных к JSON строка вообще. Это просто требует синтаксического анализа JSON для простого JS объекта, а затем итерации по ключу / значениям для формирования строки S CSS:

function jsonToSCSS(stringdata=``, data={}) {
  /* JSON.parse can throw. Always be ready for that. */
  try { data = JSON.parse(stringdata); }
  catch (e) { console.warn(e); return ``; }

  return Object.keys(data)
               .map(key => `${key}: ${data[key]};`)
               .join('\n');
}

И готово. Вывод этой функции теперь представляет собой обычную отформатированную строку:

$primary: #ea80fc;
$p_light: #ffb2ff;
$p_dark: #b64fc8;
$secondary: #b64fc8;
$s_light: #f9683a;
$s_dark: #870000;

, которую вы теперь можете записать в любой файл, в который хотите записать, либо напрямую, либо сам по себе в формате:

const SCSS = jsonToSCSS(inputdata);
const qualified = `.someclass { ${SCSS} }`;
1 голос
/ 03 февраля 2020

Более упрощенно

scrape(url).then(result => {
  return JSON.stringify(result.replace(/['"{}]+/g, "").replace(/[:]+/g, ":").replace(/,+/g, ";"));
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...