Как мы можем более оптимизировать код переключения ниже?

Что касается методов RegExp для синтаксического анализа (x) HTML, то ответ всем тем, кто говорил о некоторых ограничениях, заключается в следующем: вы недостаточно подготовлены, чтобы управлять силой этого мощного оружия, поскольку NOBODI здесь говорил о рекурсии.

Сотрудник RegExp-agnostic уведомил меня об этом обсуждении, которое, конечно же, не является первым в Интернете по этой старой и горячей теме.

После прочтения некоторых сообщений первый вещь, которую я сделал, искала строку «? R» в этой теме. Второй - искать «рекурсию». Нет, святая корова, не найдено. Поскольку никто не упоминал о главном механизме, на котором построен парсер, я скоро понял, что никто не понял.

Если парсер (x) HTML нуждается в рекурсии, парсер RegExp без рекурсии недостаточно для этой цели , Это простая конструкция.

Черное искусство RegExp сложно освоить, поэтому, возможно, есть еще возможности, которые мы оставили во время тестирования и тестирования нашего личного решения, чтобы захватить всю сеть в одной руке ... Ну , Я уверен в этом:)

Вот волшебный паттерн:

$pattern = "/<([\w]+)([^>]*?)(([\s]*\/>)|(>((([^<]*?|<\!\-\-.*?\-\->)|(?R))*)<\/\\1[\s]*>))/s";

Просто попробуйте. Он написан как строка PHP, поэтому модификатор «s» делает классы include новыми. Вот пример заметки в руководстве по PHP, которое я написал в январе: Ссылка

(Позаботьтесь, в этой заметке я ошибочно использовал модификатор «m», его следует стереть, несмотря на он отбрасывается движком RegExp, поскольку не использовалось no ^ или $ anchorage.

Теперь мы можем говорить о границах этого метода с более информированной точки зрения:

  1. в соответствии с конкретной реализацией движка RegExp, рекурсия может иметь ограничение в количестве проанализированных вложенных шаблонов, но это зависит от используемого языка
  2. , хотя поврежденный (x) HTML не управляет

Во всяком случае, это только шаблон RegExp, но он раскрывает возможность разработки множества мощных реализаций. Я написал этот шаблон, чтобы заставить рекурсивный парсер спуска механизма шаблона, который я построил в своей структуре, и производительность действительно велика, как во время выполнения, так и в использовании памяти (ничего общего с другими механизмами шаблонов, которые используйте тот же синтаксис).

0
задан dhananjay_shingote 17 January 2019 в 15:49
поделиться

2 ответа

Что-то вроде этого достаточно?:

setDefaultIndex(selectedFit, defaults, array, fab) {
  const defaultValue =  defaults.filter(item => item.fitCode === selectedFit);
  let selectedIndex: number = 0;
  const id = fab => {
    case 'exterior': return defaultValue[0].exteriorFabricCode
    case 'body': return defaultValue[0].bodyLiningCode'
    case 'sleeve': return defaultValue[0].sleeveLiningCode'
    default: false
  }
  return id(fab) ? array.findIndex(f => f.id === id(fab)) : selectedIndex
}
0
ответ дан 0xc14m1z 17 January 2019 в 15:49
поделиться
  1. Создайте объект (или карту), который отображает значение fab для ввода значений по умолчанию (fabToKey).
  2. Создать функцию (getPredicate), которая принимает значение и возвращает предикат.
  3. В setDefaultIndex получают значение fab из fabToKey. Если ключ ложный, верните 0;
  4. Получите defaultValue, используя Array.find(). Примечание: вам нужно обработать не найденный случай - то есть поиск возвращает null.
  5. Запустите findIndex() с предикатом, созданным путем вызова getPredicate с defaultValue[key].

Пример (не тестировался):

const fabToKey = { exterior: 'exteriorFabricCode', body: 'bodyLiningCode', sleeve: 'sleeveLiningCode' };

const getPredicate = value => ({ id }) => id === value;

setDefaultIndex(selectedFit, defaults, array, fab) {
  const key = fabToKey[fab];

  if (!key) return 0;

  const defaultValue = defaults.find(item => item.fitCode === selectedFit);

  // do something if defaultValue is null - ie selectedFit wasn't found

  return array.findIndex(getPredicate(defaultValue[key]));
}
0
ответ дан Ori Drori 17 January 2019 в 15:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: