В IE не работает оператор spread (…). Как адаптировать JS-код для IE или сделать на JQuery?

110
15 ноября 2020, 18:50

Во всех браузерах работает, а в IE - синтаксическая ошибка.

Подскажите, как адаптировать следующий JS-код для IE или сделать на JQuery?

var wrongs = ""; 
 
function getForbiddenblocks(){ 
//Сохраняем плохие блоки в виде набора, чтобы избежать дублирования 
var matches = new Set(); 
while ((match = pattern.exec(value)) !== null) { 
  //Каждый раз срабатывает только одна часть шаблона, 
  //Поэтому мы можем сделать join, чтобы её получить 
  matches.add(match.join('')); 
  //Из-за lookahead регекс срабатывает без увеличения LastIndex 
  //Чтобы избежать бесконечного цикла, увеличиваем lastIndex вручную 
  pattern.lastIndex++;  
} 
 
//Если набор пустой, то в строке не содержится запрещённых символов 
if (matches.size) { 
  //Преобразуем набор в список и 
  //объединяем элементы списка в строку через пробел 
  wrongs = [...matches].join(' '); 
    
}  
 
} 
 
var pattern = /(?:(?=(\{))|(?=(\}))|(?=(\[))|(?=(\]))|(?=(script)))/g; //запрещенные символы 
var value = '{ test } [script] {} test123'; 
 
getForbiddenblocks(); 
 
 
document.write('Запрещенные символы в строке: ' + wrongs);

@Sergey Nudnov подсказал базовый код вот здесь, но чтобы адаптировать к IE он пишет:

замените ... циклом как здесь

Однако не пойму как это реализовать.

Answer 1

Так подойдет? я заменил работу c Set на объект, чтобы избежать проблем с ie. используем ключи объекта, чтобы повторить логику Вашего скрипта, по избежанию дублирования

var wrongs = ""; 
 
function getForbiddenblocks(){ 
  //Сохраняем плохие блоки в виде набора, чтобы избежать дублирования 
  var matches = {}; 
  while ((match = pattern.exec(value)) !== null) { 
    //Каждый раз срабатывает только одна часть шаблона, 
    //Поэтому мы можем сделать join, чтобы её получить 
    matches[match.join('')]=0; 
    //Из-за lookahead регекс срабатывает без увеличения LastIndex 
    //Чтобы избежать бесконечного цикла, увеличиваем lastIndex вручную 
    pattern.lastIndex++;  
  } 
  var arr = Object.keys(matches); 
  //Если набор пустой, то в строке не содержится запрещённых символов 
  if (arr.length) { 
    //Преобразуем набор в список и 
    //объединяем элементы списка в строку через пробел 
    wrongs = arr.join(' '); 
  }  
} 
 
var pattern = /(?:(?=(\{))|(?=(\}))|(?=(\[))|(?=(\]))|(?=(script)))/g; //запрещенные символы 
var value = '{ test } [script] {} test123'; 
 
getForbiddenblocks(); 
 
 
document.write('Запрещенные символы в строке: ' + wrongs);

READ ALSO
Как сделать колонки между блоками?

Как сделать колонки между блоками?

как сделать такие вот колонки между блоками?

125
Изменения стиля при нажатии кнопки React

Изменения стиля при нажатии кнопки React

При нажатии на одну из двух кнопок отображается имяКак заставить активную кнопку изменять свой цвет и высоту текста, пока не будет нажата...

139
Чтение объектов класса из файла в массив объектов класса

Чтение объектов класса из файла в массив объектов класса

Здесь два главных класса: класс Поезд и класс Билеты, класс Билеты наследует класс ПоездПроблема в том, что не могу считать из файла ( в который...

130
Не могу вызвать функцию _beginthread(..), c++

Не могу вызвать функцию _beginthread(..), c++

Хочу запустить метод в отдельном потоке при помощи функции _beginthread(), но получаю ошибку, если не было указано void* в аргументах функции

138