Парсинг массива и обработка данных в JS коде. Как пройти ошибку?

Как пройти ошибку?

Есть задача: удаление из массива всех строк что идут выше трёх подряд идущих строк в конце которых есть знаки препинания (знаки препинания определены в массиве [[SYMBOLS]] )

Есть JS код для этого (его я привёл в конце этой темы). Кодом обрабатываю этот массив текста но получаю ошибку: SyntaxError: Unexpected token Я in JSON at position 1

Сразу поясню 3 нюанса:

1) Многострочный список строк (массив) в моём интерпретаторе JS задаётся в виде оборачивания в [[]]. Для языка JS он является массивом (Массив - он же объект).

Например, вот так выглядит массив [[1AA]] (см. скрин ниже) текст тут дан как пример, поэтому текст может быть любым:

1AA

2) Вставить многострочный массив в JS код в таком виде (в виде строки) нельзя, так как тексты внутри [[1AA]] могут быть любые:

let text = `Я видел огненные знаки
Чудес, рожденных на заре
Я вышел — пламенные маки,
Сложить на горном алтаре.
Со мною утро в дымных ризах,
Кадило в голубую твердь,
И на уступах, на карнизах`;

3) Нужно определять только так: Присваиваем переменной text массив [[1AA]]

let text = [[1AA]];

Как я пытаюсь решить эту задачу: В коде Яваскрипта сначала делаю распарс с помощью JSON.parse преобразуя массив [[1AA]] в строку вот так:

let text = [[1AA]];
var qqq = JSON.parse("[" + text + "]");
let str = qqq.split(',');

А тут собственно весь JS код :

let text = [[1AA]];
var qqq = JSON.parse("[" + text + "]");
let str = qqq.split(',');
const punct = [[SYMBOLS]];
const numStrWithPunctEnd = 3;
const arr = str.split('\n');
const index = arr.findIndex(function(n, i, a) {
  return this.every(m => punct.includes(a[i + m].slice(-1)));
}, [...Array(numStrWithPunctEnd).keys()]);
const result = index !== -1 ? arr.slice(index).join('\n') : str;
[[1AA]]=result;

При обработке всего приведённого выше JSкода я получаю ошибку, как её пройти?


Ответы (1 шт):

Автор решения: alezhu

У Вас каша где массив, где строка:

const SYMBOLS = [',','.','?','!',':',';'];
const str =   `двенадцать яблок
двенадцать яблок
двенадцать яблок
двенадцать яблок
двенадцать яблок
двенадцать яблок
двенадцать яблок
Апельсин.
Слива.
два ананаса.
семь киви.`

let arr = str.split("\n");
const numStrWithPunctEnd = 3;

const index = arr.findIndex(
  function (n, i, a) {
    return this.every((m) => SYMBOLS.includes(a[i + m].slice(-1)));
  },
  [...Array(numStrWithPunctEnd).keys()]
);
const result = index !== -1 ? arr.slice(index).join('\n') : str;
console.log(result);
→ Ссылка