Функция которая оборачивает в span по координатам с массива обьектов
Знатоки JS, вот пытась решить задачку, в которой есть стринг, и координаты по которым нужно вставить span. В результате должно быть так примерно (может и индексами промахнулся): Дофига текста, а span вот этот фрагмент зеленый span , а вот тут дальше дофига теста, span и еще одно зеленое span Как я делаю, но не получается(
const str = 'Дофига текста, а вот этот фрагмент зеленый,
а вот тут дальше дофига теста, и еще одно зеленое';
const coordinates = [
{ in: 18, out: 45 },
{ in: 77, out: 94 },
];
const arrFromString = str.split('');
let strWhithSpan = '';
let strNotspan = '';
const resString = coordinates.reduce((acc, cord) => {
arrFromString.map((str, index) => {
if (index+1 > cord.in && index+1 < cord.out) {
strWhithSpan = strWhithSpan + str;
acc = `<span>${strWhithSpan}</span>`;
} else {
strNotspan = strNotspan + str;
acc = strNotspan;
}
});
return acc;
}, '');
Ответы (1 шт):
Автор решения: Aziz Umarov
→ Ссылка
Не мучайтесь выставляйте индексы поверяя предварительно.
Попробуйте так
const str = 'Дофига текста, а вот этот фрагмент зеленый, а вот тут дальше дофига теста, и еще одно зеленое';
const coordinates = [
{ in: 17, out: 41 },
{ in: 75, out: 92 },
];
const arrFromString = str.split('');
const resString = arrFromString.map((strPart, index) => {
if (coordinates.map(cord=>cord.in).includes(index)) {
return `<span>${strPart}`;
} else if (coordinates.map(cord=>cord.out).includes(index)) {
return `${strPart}</span>`;
} else {
return strPart;
}
}).join("");
console.log(resString);
сокращенный вариант
const str = 'Дофига текста, а вот этот фрагмент зеленый, а вот тут дальше дофига теста, и еще одно зеленое';
const coordinates = [
{ in: 17, out: 41 },
{ in: 75, out: 92 },
];
const arrFromString = str.split('');
const resString = arrFromString.map((strPart, index) =>
coordinates.map(cord=>cord.in).includes(index)? `<span>${strPart}`: coordinates.map(cord=>cord.out).includes(index)? `${strPart}</span>`:strPart
).join("");
console.log(resString);