const splitBy = (text, trimWhitespaces = false, delimiter = ',', escape = '"') => {
const entries = [];
const chars = [...text];
const length = chars.length;
let entry = '';
let isEscaped = false;
let isSequence = false;
let isWillDelimiter = false;
let needResetEscaped = false;
for (let index = 0; index < length; index++) {
const char = chars[index];
const isChar = char !== delimiter || (char === delimiter && isSequence);
if (isWillDelimiter && isChar) {
throw new Error(`Unexpected char. Required delimite by ${delimiter} char.`);
}
isWillDelimiter = false;
if (char === "\\") {
isEscaped = true
}
if (char === escape && !isEscaped) {
isSequence = !isSequence;
if (!isSequence) {
isWillDelimiter = true;
}
}
if (needResetEscaped) {
isEscaped = false;
needResetEscaped = false;
}
if (isChar) {
if (isEscaped) {
entry += '\\';
needResetEscaped = true;
}
entry += char;
}
if (!isChar || index === length - 1) {
const preparedEntry = trimWhitespaces ? entry.trim() : entry;
entries.push(preparedEntry);
entry = '';
}
if (isSequence && index === length - 1) {
throw new Error(`Unexpected string end. Required close sequence by ${escape} char.`);
}
}
return entries;
};
npm run build, или подобной. После чего собранное приложение уже разместить на сервере.
setNumber, который используется в setInterval:Монтирование -> setNumber -> рендер
Ререндер-> setNumber + 1 от прошлого рендера -> 2 рендера
x2 Ререндер -> setNumber + 2 от прошлого рендера -> 4 рендера (было запущена уже 2 setInterval и каждый еще раз вызвал рендер)
и т.д.
setInterval Вы не очищаете. На первый рендер он один, на второй - два, на третий - три и т.д.. Причем, количество рендеров будет расти стремительно, т.к. каждый такой setInterval будет его вызывать.
const mapOptions = (options, values) => option.map(({ option }) => {
const usedValues = new Set();
return {
id: option.id,
name: option.name,
slug: option.slug,
values: values
.filter(({ id, value }) => {
if (id === option.id) {
const isUsed = usedValues.has(value);
usedValues.add(value);
return !isUsed;
}
return false;
})
.map(({ id, value }) => ({ id, value }))
};
});